LL1 грамматика для простого калькулятора (+, -, *, /, pow, root) - PullRequest
0 голосов
/ 18 марта 2020

Я придумал эту грамматику, которая позволяет успешно добавлять / суб числа в скобках и еще много чего. Однако мне очень трудно расширить его для pow (^) и root (#) logi c. Я благодарен за любую помощь, так как сейчас я в упор ...

nonZeroDigit = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9";
digit = "0" | nonZeroDigit;
naturalNumber = nonZeroDigit , {digit};
secondPriorityOperators= "+" |"-";
firstPriorityOperators= "*" | "/";
syntax=expr;
expr=term, {secondPriorityOperators, term};
term=factor, {firstPriorityOperators, factor};
factor="(", expr , ")" | naturalNumber;
root = "#" , root | factor;
power = root, "^" , power| root;

Для тестирования я использовал этот сайт: https://planetcalc.com/6385/

1 Ответ

0 голосов
/ 18 марта 2020

Просто добавьте еще один уровень приоритета:

thirdPriorityOperators= "+" |"-";
secondPriorityOperators= "*" | "/";
firstPriorityOperators= "#" | "^";

term3rd=term2nd, {thirdPriorityOperators, term2nd};
term2nd=term1st, {secondPriorityOperators, term1st};
term1st=factor, {firstPriorityOperators, factor};
...