Моя 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^ тогда я могу разобрать одно число (но, очевидно, не другие выражения).

Я не понимаю, почему я не могу разобрать ни одного числа с этой грамматикой..?

Обратите внимание, что я работаю над проектом, который был реализован с этой версией давным-давно, и я просто расширяю существующие вещи.

0 ответов

Другие вопросы по тегам