Grammar LL1简单计算器语法(+;,-,*,/,pow,root)

Grammar LL1简单计算器语法(+;,-,*,/,pow,root),grammar,context-free-grammar,Grammar,Context Free Grammar,我想出了这个语法,它成功地在括号中添加了/子数字等等。但是,我发现很难为pow(^)和root(#)逻辑扩展它。我很感激你的帮助,因为我现在已经陷入困境 nonZeroDigit = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"; digit = "0" | nonZeroDigit; naturalNumber = nonZeroDigit , {digit}; secondPriorityOperators= "+" |"-"; firstPriorityOpera

我想出了这个语法,它成功地在括号中添加了/子数字等等。但是,我发现很难为pow(^)和root(#)逻辑扩展它。我很感激你的帮助,因为我现在已经陷入困境

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;

对于测试,我使用了这个站点:

只需添加另一个优先级:

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

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