Как написать правило лексера, которое различает операторы -9 и - в арифметической операции 9 - 9? - PullRequest
1 голос
/ 10 апреля 2019

Я пишу простой анализатор выражений, используя Antlr4 для приложения калькулятора.Я понятия не имею, как написать грамматику, которая различает цифру -9 и арифметическое выражение 9 - 9. Любая помощь очень ценится

Вот мое выражение грамматики.g4:

grammar expression;

expression = expression ADDOPER expression
             | expression SUBOPER expression
             | NUMBER;

/* lexical rules */
ADDOPER     :'+';
SUBOPER     :'-';

NUMBER         : -?[1-9]+ [0-9]*('.'DIGIT+)? |'0'?('.'DIGIT+) |'0' ;

Проблема с приведенной выше грамматикой заключается в том, что она соответствует -9 как число в арифметическом выражении 9 - 9, но предполагается, что это полная арифметическая операция.

Но -9 + 9 работает нормально.

1 Ответ

2 голосов
/ 10 апреля 2019

-9 это просто выражение.Итак, просто сделайте это:

expression
 : SUBOPER expression
 | expression ADDOPER expression
 | expression SUBOPER expression
 | NUMBER
 ;

и удалите - из вашего NUMBER:

NUMBER
 : [1-9] [0-9]* ( '.'DIGIT+ )? 
 | '0'? '.' DIGIT+ 
 | '0' 
 ;
...