Я пишу простой анализатор выражений, используя 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
работает нормально.
-9 это просто выражение. Итак, просто сделайте это:
expression
: SUBOPER expression
| expression ADDOPER expression
| expression SUBOPER expression
| NUMBER
;
и удалите -
из NUMBER
:
NUMBER
: [1-9] [0-9]* ( '.'DIGIT+ )?
| '0'? '.' DIGIT+
| '0'
;
Да, я понял. Мои предложенные изменения должны это исправить. Предложенная мной грамматика будет правильно анализировать 9 - 9
, 9-9
, -9 + 9
и т. д.
Приятно это слышать, и добро пожаловать @SaravananRamupillai
привет @bhart, я думаю, я пропустил сообщение. Проблема в том, что когда я даю
9 - 9
в качестве входных данных для приведенной выше грамматики, он не соответствует-
как оператор, вместо этого он соответствует-9
как число. так что мое арифметическое выражение не удалось. Мое дерево префиксов должно быть похоже наoperator(-), Number (9), Number(9)
, но результат былNumber(9), Number(-9)
.