ANTLR игнорируя операторов AST - PullRequest
2 голосов
/ 28 февраля 2012

Я использую ^ и! Операторы устанавливают корневой узел и не должны быть включены в AST соответственно. Тем не менее, это не имеет значения в дереве, которое генерируется ANTLRWorks. Поэтому я не уверен, что моя грамматика неверна или ANTLRWorks просто не создает правильное дерево.

Вот фрагмент моей грамматики

expr
:   '('! logExpr ')'!;

Эти скобки не должны быть включены в AST.

addExpr
:   multExpr ( (PLUS|MINUS)^ multExpr )*;

PLUS или MINUS должны быть корневым узлом в AST.

Однако ни одна из этих вещей не происходит так, как я ожидаю. Не имеет значения, когда я их снимаю или кладу обратно. ANTLRWorks 1.4.3 ANTLR 3.4

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

Интерпретатор ANTLRWorks показывает дерево разбора, даже если вы поместили output=AST; в блок опций грамматики, как вы уже нашли себя.

Однако, отладчик ANTLRWorks делает показать АСТ.Чтобы активировать отладчик, нажмите CTL + D или выберите Выполнить -> Отладка в строке меню.

Отладчик способен визуализировать дерево разбора и AST.Обратите внимание, что он не обрабатывает встроенный код, отличный от Java.

enter image description here

2 голосов
/ 28 февраля 2012

Я нашел ответ. ANTLRWorks показывает дерево разбора, а не AST. Он игнорирует все переписывает. Это привело ко второму вопросу: как я могу визуализировать AST, если ANTLRWorks не делает это для меня? Ответ на этот вопрос найден здесь .

...