0

文法を単項演算で動作させるのに問題があります。たとえば、「-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 演算子は既に希望どおりに機能していますが、「*」、「/」、および「%」が正しく解釈されるようにするには、「+」および「-」の種類が必要です。 . これをどのように解決すればよいですか?ところで、もっと文法が必要な場合はお知らせください。必要以上のコードをここにドロップする必要はないと思いました。

4

2 に答える 2

0

いくつか試した後、解決策を見つけました:

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