Моя ANTLR грамматика с необязательным токеном завершается неудачно для простых операторов
Я использую ANTLR 2.7 для создания грамматики для разбора простых выражений, таких как
1
2%
(3%)
(4)
((5))
((6%))
Это простые числа, которые могут иметь парантез и дополнительные символы процента
Моя грамматика выглядит так:
class MyParser extends Parser;
options {
k=2;
buildAST = true;
}
parexpr
: variable
| LPAREN^ parexpr RPAREN!
;
variable
: (NUMBER PCT) => NUMBER PCT^
| NUMBER
;
class MyLexer extends Lexer;
options {
k=6;
}
LPAREN: '(';
RPAREN: ')';
DOT: '.';
PCT: '%';
protected
DIGIT: '0'..'9';
NUMBER: (DIGIT)+ (DOT (DIGIT)+)*;
Я могу успешно разобрать например
(1)
(2%)
Но он не может разобрать одно число:
1
Если я удалю либо | LPAREN^ parexpr RPAREN!
или же : (NUMBER PCT) => NUMBER PCT^
тогда я могу разобрать одно число (но, очевидно, не другие выражения).
Я не понимаю, почему я не могу разобрать ни одного числа с этой грамматикой..?
Обратите внимание, что я работаю над проектом, который был реализован с этой версией давным-давно, и я просто расширяю существующие вещи.