私のvbscript文法のこの部分を考慮してください
EXPR.Rule = BINARY_EXPR
| COMPARE_EXPR
| AND_EXPR
| OR_EXPR;
BINARY_EXPR.Rule = EXPR + BINARY_OP + EXPR + ReduceHere();
COMPARE_EXPR.Rule = EXPR + COMPARE_OP + EXPR + ReduceHere();
AND_EXPR.Rule = EXPR + "and" + EXPR;
OR_EXPR.Rule = EXPR + "or" + EXPR;
COMPARE_OP.Rule = ToTerm("=") | "<=" | ">=" | "<" | ">" | "<>";
BINARY_OP.Rule = ToTerm("+") | "&" | "^" | "-" | "*" | "/" | "\\";// | "=" | "<=" | ">=" | "<" | ">" | "<>" | "mod" | "and" | "or";
RegisterOperators(60, "^");
RegisterOperators(50, "*", "/", "\\", "mod");
RegisterOperators(40, "+", "-", "&");
RegisterOperators(30, "=", "<=", ">=", "<", ">", "<>");
RegisterOperators(20, "and", "or");
そしてこのvbscriptプログラム:
if 2=1+1 then x = 5
if (2=1)+1 then x = 5
の代わりにこれを解析していif 2=(1+1) then x = 5
ます。BINARY_EXPR
以前に指定したことがありますCOMPARE_EXPR
が、「+」は演算子の優先順位が高いため、最初に加算操作を探す必要があることを伝える方法がわかりません。これを他にどのように表現すれば、Irony が意図したとおりに解析できるでしょうか?