Прослушиватель — это то, что вы реализуете и вызывается обходчиком ANTLR. Вы должны настроить ходок, дать ему свое дерево синтаксического анализа и свою реализацию слушателя.
Посетитель — это просто класс, который вы называете сами. Функция, которую вы вызываете, соответствует соответствующему узлу AST и называется примерно так: visitStatement
или visitProgram
. Имя основано на правиле синтаксического анализатора грамматики ANTLR, или, если вы дали имена подправилам (используя синтаксис #alternativeNameForThisSubrule
), оно основано на имени, которое вы ему дали. Но к нему будет добавлено visit
.
Это то, что сбило меня с толку, потому что примеры, которые я видел, беспечно использовали visit
в качестве замены фактической используемой функции.
В любом случае, использование посетителя полностью ручное.
var chars = new antlr4.InputStream(input)
var lexer = new FancyLexer(chars)
var tokens = new antlr4.CommonTokenStream(lexer)
var parser = new FancyParser(tokens)
parser.buildParseTrees = true
var tree = parser.block() // 'block' is the start rule
var visitor = new FancyVisitor()
return visitor.visitBlock(tree) // 'visitBlock' since that was the start rule
person
Gabe Johnson
schedule
02.03.2016