运算符优先级和一元运算符具有讽刺意味

时间:2012-05-25 16:18:24

标签: c# parsing irony

我在让我的语法与一元操作一起工作时遇到了问题。例如,如果我输入“-5/2”,我得到 - (5/2),而不是(-5)/ 2,我想得到。在这种特殊情况下,差异并不重要,但是,我仍然认为解决这个问题对语法很重要。

然而,将1-5 / 2的解析分解为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运算符已经按照我的意愿运行,但是,“+”和“ - ”类型需要它们的位置,以确保“*”,“/”和“%”被正确解释。我该怎么解决这个问题?顺便说一句,如果您需要更多的语法,请告诉我,我只是觉得我不需要在这里删除更多的代码。

2 个答案:

答案 0 :(得分:0)

经过一番尝试,我找到了一个解决方案:

UnaryExpr.Rule = ImplyPrecedenceHere(30) + LUnOp + Expr;

答案 1 :(得分:0)

这对我有用

UnaryExpr.Rule = LUnOp + Expr + ReduceHere();