首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javacc冲突产品

Javacc冲突产品
EN

Stack Overflow用户
提问于 2015-03-29 17:22:16
回答 2查看 49关注 0票数 0

我有两个输入

  1. a - b
  2. a += b

我有一个有选择的作品

代码语言:javascript
复制
void AssignmentExpression() : {}
{
  LOOKAHEAD(3) ConditionalExpression()
| LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
}

使用此产品,输入(1)工作,但输入(2)不工作。

如果我把产品中的选择交换成

代码语言:javascript
复制
void AssignmentExpression() : {}
{
  LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
| LOOKAHEAD(3) ConditionalExpression()
}

则输入(2)起作用,但输入(1)不起作用。

我该怎么解决这个问题?增加查找参数没有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 19:48:21

递归下降的表达式解析。遵循“经典解决方案”。

由于您使用的是JJTree,所以使用javacc创建一个生成二叉树的计算器语法问题的答案将是有帮助的。

票数 0
EN

Stack Overflow用户

发布于 2015-03-30 09:23:27

你可以试试

代码语言:javascript
复制
void AssignmentExpression() : {}
{
  LOOKAHEAD(UnaryExpression() AssignmentOperator() )
  UnaryExpression() AssignmentOperator() AssignmentExpression()
| ConditionalExpression()
}

如果没有看到更多的语法,就很难知道这是否有效。由于使用展望规范将禁止来自JavaCC的任何警告--JavaCC“假设”您知道自己在做什么--您必须自己进行分析。

我的另一个答案更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29332297

复制
相关文章

相似问题

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