Как конфертировать из antlr v2 в v3 грамматику?
У меня есть грамматика ниже в v2 ANTLR, мне нужна помощь, чтобы преобразовать ее в v3
expression
: ( simpleLookup
| lookup
)
( x:LSQRBRACKET^ {#x.setType(ATTRIBUTES);} attributesExpr RSQRBRACKET! )?
;enter code here
На самом деле я пробовал ниже, но не уверен, будет ли это так же или нет, а также получаю ошибку ниже при попытке собрать парсер
expression
: ( simpleLookup
| lookup
)
(x=LSQRBRACKET b=attributesExpr RSQRBRACKET )?) -> ^(ATTRIBUTES[$x] $a $b)?
;
и получить ниже ошибки
expecting SEMI, found '->'
unexpected token: $
unexpected token: $
unexpected token: )
Как конвертировать "!" in v3 from v2?
Пожалуйста, помогите мне с вашим опытом.....
У меня есть еще один вопрос: как я могу написать синтаксический анализатор дерева в v3 на уровне грамматики, как в v2, который мы использовали для записи в следующем формате?
class CustomTreeParser extends TreeParser;
1 ответ
Попробуйте что-то вроде этого:
grammar YourGrammarName;
options {
output=AST;
}
tokens {
ATTRIBUTES;
}
// ...
expression
: ( simpleLookup
| lookup
)
( x=LSQRBRACKET^ {$x.setType(ATTRIBUTES);} attributesExpr RSQRBRACKET! )?
;
// ...
Как конвертировать "!" в v3 от v2?
Встроенный !
Оператор, который исключает определенные правила / токены из AST, остается неизменным в v3.
Еще один вопрос, который у меня есть, как я могу написать синтаксический анализатор дерева в v3 на уровне грамматики, как в v2 ...
Как это:
options {
output=AST;
}