0

我在让我的语法与一元运算一起工作时遇到问题。例如,如果我输入“-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 运算符已经按照我的意愿工作,但是,“+”和“-”类型需要在它们所在的位置,以确保正确解释“*”、“/”和“%” . 我应该如何解决这个问题?顺便说一句,如果您需要更多语法,请告诉我,我只是认为我不需要在这里丢弃更多的代码。

4

2 回答 2

0

经过一番尝试,我想出了一个解决方案:

UnaryExpr.Rule = ImplyPrecedenceHere(30) + LUnOp + Expr;
于 2012-05-25T18:51:30.643 回答
0

这对我有用

UnaryExpr.Rule = LUnOp + Expr + ReduceHere();
于 2019-07-04T23:14:47.547 回答