В разделе 12.1 в «Определяющем описании Antlr 4» показано, как получить доступ к комментариям, не используя правила комментариев во всей грамматике. Короче говоря, вы добавляете это в файл грамматики:
grammar Java;
@lexer::members {
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}
. Тогда для ваших правил комментариев выполните следующее:
COMMENT
: '/*' .*? '*/' -> channel(COMMENTS)
;
LINE_COMMENT
: '//' ~[\r\n]* -> channel(COMMENTS)
;
Затем в коде запросите токены через getHiddenTokensToLeft / getHiddenTokensToRight и посмотрите раздел 12.1 в книге, и вы увидите, как это сделать.
Последний листинг кода включает в себя то, что я узнал. По сути, я не понимал того факта, что «переменные», упоминаемые во многих публикациях как обновляемые, на самом деле были переменными tkinter (StringVar, BooleanVar и т. Д.). Таким образом, переменные python необходимы для установки переменных tkinter. Я также подумал, что mainloop автоматически ищет изменения в переменных tkinter и обновляется автоматически. Другими словами, я не понимал, что мне нужно было установить «trace» для переменных, которые я хотел наблюдать. После этого мне нужно было узнать, что «трассировка» не обновляется автоматически, вы должны использовать ее, чтобы вызвать явное «обновление». В моем фактическом коде (слишком длинном, чтобы публиковать здесь) я использую переменные tkinter, «установленные» событиями midi, чтобы изменить выбор в списке (через «очистить», «активировать», «selection_set» и «посмотреть») и «обновить» "изображения, отображаемые в метке (которые связаны с индексом выбранного элемента). Насколько я могу судить, автоматически ничего не происходит.