繁体   English   中英

我将如何在我的语法中实现运算符优先级?

[英]How would I implement operator-precedence in my grammar?

我正在尝试制作一个表达式解析器,虽然它可以工作,但它是按时间顺序而不是按 BIDMAS 进行计算的; 1 + 2 * 3 + 4返回15而不是11 我重写了解析器以使用递归下降解析和我认为可行的正确语法,但它犯了同样的错误。

到目前为止,我的语法是:

exp     ::= term op exp | term
op      ::= "/" | "*" | "+" | "-"
term    ::= number | (exp)

它也缺乏其他功能,但现在我不确定如何使除法先于乘法等。我应该如何修改我的语法以实现运算符优先级?

尝试这个:

exp   ::= add
add   ::= mul (("+" | "-") mul)*
mul   ::= term (("*" | "/") term)*
term  ::= number | "(" exp ")"

这里()*表示零次或多次。 该文法将产生右关联树,并且它是确定性和明确的。 乘法和除法具有相同的优先级。 加减也。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM