具有讽刺意味的是运算符优先级和一元运算符
本文关键字:运算符 一元 优先级 讽刺 | 更新日期: 2023-09-27 18:35:31
我在让我的语法与一元运算一起使用时遇到了问题。例如,如果我输入"-5/2",我会得到-(5/2),而不是我想得到的(-5)/2。在这种特殊情况下,差异无关紧要,但是,我仍然认为解决此问题对语法很重要。
但是,同样重要的是,将 1-5/2 get 解析为 1-(5/2) 而不是 (1-5)/2。
目前我已注册以下运营商:
RegisterOperators(1, "||");
RegisterOperators(2, "&&");
RegisterOperators(3, "|");
RegisterOperators(4, "^");
RegisterOperators(5, "&");
RegisterOperators(6, "==", "!=");
RegisterOperators(7, "<", ">", "<=", ">=", "is");
RegisterOperators(8, "<<", ">>");
RegisterOperators(9, "+", "-");
RegisterOperators(10, "*", "/", "%");
RegisterOperators(11, "!");
RegisterOperators(-1, "?");
RegisterOperators(-2, "=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>=");
not 运算符已经按照我想要的方式工作了,但是,"+"和"-"类型需要放在它们所在的位置,以确保正确解释"*"、"/"和"%"。我应该如何解决这个问题?顺便说一句,如果你需要更多的语法,请告诉我,我只是认为我不需要在这里删除更多的代码。
经过一番尝试,我想出了一个解决方案:
UnaryExpr.Rule = ImplyPrecedenceHere(30) + LUnOp + Expr;
这对
我有用
UnaryExpr.Rule = LUnOp + Expr + ReduceHere();