Как настроить и вызвать ANTLR4 Javascript Visitor

Может ли кто-нибудь объяснить или указать мне на рабочий пример реализации Javascript Visitor ANTLR4 в использовании? В документации по цели Javascript ANTLR4 показано, как реализовать Слушатель, но не Посетитель.

Этот вопрос касается не грамматик ANTLR и даже не самого инструмента. Я могу использовать этот инструмент для создания JS-файла посетителя. Я просто понятия не имею, как его вызвать.


person Gabe Johnson    schedule 12.02.2016    source источник
comment
Посмотрите, может ли это вам помочь: gist.github.com/anonymous/6b388afff93da12cbb2d   -  person thur    schedule 05.03.2016
comment
Отвечает ли это на ваш вопрос? Посетитель Javascript Antlr4   -  person ggorlen    schedule 25.03.2020


Ответы (1)


Прослушиватель — это то, что вы реализуете и вызывается обходчиком 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