2012-05-25 87 views
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, "=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>="); 

的不是运营商已经工程,我想它,但是,“+”和“ - ”之类的需要是他们是为了在那里确保正确解释“*”,“/”和“%”。我应该如何解决这个问题?顺便说一句,如果你需要更多的语法让我知道,我只是想,我不需要在这里放弃更多的代码。

回答

0

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

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