代码之家  ›  专栏  ›  技术社区  ›  user3703887

Javacc冲突产品

  •  0
  • user3703887  · 技术社区  · 11 年前

    我有两个输入

    1. a - b
    2. a += b

    我有一部可以选择的作品

    void AssignmentExpression() : {}
    {
      LOOKAHEAD(3) ConditionalExpression()
    | LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
    }
    

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

    如果我在制作中交换选择

    void AssignmentExpression() : {}
    {
      LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
    | LOOKAHEAD(3) ConditionalExpression()
    }
    

    然后输入(2)工作,但输入(1)不工作。

    我该如何修复?增加LOOKAHEAD参数没有帮助。

    2 回复  |  直到 11 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    看见 Expression Parsing by Recursive Descent 。遵循“经典解决方案”。

    既然您使用的是JJTree,那么问题的答案 Make a calculator's grammar that make a binary tree with javacc 将有帮助。

        2
  •  0
  •   Theodore Norvell    11 年前

    你可以试试

    void AssignmentExpression() : {}
    {
      LOOKAHEAD(UnaryExpression() AssignmentOperator() )
      UnaryExpression() AssignmentOperator() AssignmentExpression()
    | ConditionalExpression()
    }
    

    如果不了解更多的语法,很难知道这是否有效。由于前瞻性规范的使用将抑制来自JavaCC的任何警告,所以JavaCC“假设”您知道自己在做什么——您必须自己进行分析。

    我的另一个答案更好。