计算器数学运算符优先级经常被记住肺炎PMDAS。
ANTLR home page上的语法(使用相同的缩写)具有订单MDASP。这不是PMDAS或反向PMDAS,就像我期望的那样。例如。 this stackoverflow answer包含一个看起来像PMDAS的语法。
但无论我在命令行中放入什么表达式;解析树看起来正确!
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;
这是如何运作的?
答案 0 :(得分:0)
回答这个问题有点棘手,因为我不完全确定你要解析的是什么,但是这个语法所期望的伪代码可以帮助你理解它:
An int is one or more numbers from 0 to 9
A new line is one or more \r\n
an (expr)ession is made up of any of these:
an expression with a '*' or '/' and another expression
an expression with a '+' or '-' and another expression
an int
a curly brace containing an expression followed by a curly brace
the (prog)ram is made up of zero or more expressions followed by new lines.
还记得ANTLR:
首先是最长的序列。如果两个规则或更多匹配 最长的序列然后它选择指定的词法规则 第一
This link可能对您非常有用。无论如何,如果您发布了您正在努力理解的树,我们可以尝试进一步帮助您。祝你的项目好运。