首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Irony .NET:表达式运算符优先级

Irony .NET:表达式运算符优先级
EN

Stack Overflow用户
提问于 2012-09-18 17:53:06
回答 1查看 1K关注 0票数 2

我使用讽刺来解析DSL,它具有可以与and和OR组合的表达式:

代码语言:javascript
复制
/* snip */

RegisterOperators(4, orKeyword);
RegisterOperators(5, andKeyword);
RegisterOperators(9, lessThanOperator, lessEqualOperator, equalOperator, notEqualOperator, moreThanOperator, moreEqualOperator);

infixOperator.Rule = andKeyword | orKeyword;
expression_in_parens.Rule = L_PAR + expression + R_PAR;
primaryExpression.Rule = expression_in_parens | methodCall | identifier | numberIdentifier | stringIdentifier;
unaryExpression.Rule = notKeyword + L_PAR + expression + R_PAR;
binaryExpression.Rule = expression + infixOperator + expression;
compareExpression.Rule = expression + compareOperator + expression + ReduceHere();
expression.Rule = primaryExpression | unaryExpression | compareExpression | binaryExpression;

我有下面的表达式:"A and (B and C or D)“。它被解析为"A and (B and (C or D))",但我需要它是"A and ((B and C) or D)“。

我认为将and关键字注册为具有比or关键字更高优先级的运算符可以做到这一点。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-19 18:58:31

我为AND和OR创建了单独的规则,并将它们按正确的顺序排列,从而使其正常工作:

代码语言:javascript
复制
binaryAndExpression.Rule = expression + andKeyword + expression;
binaryOrExpression.Rule = expression + orKeyword + expression;
compareExpression.Rule = expression + compareOperator + expression + ReduceHere();
expression.Rule = compareExpression | binaryAndExpression | binaryOrExpression | unaryExpression | primaryExpression;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12474539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档