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

尝试示例语法时解析器的奇怪行为

  •  0
  • RCIX  · 技术社区  · 15 年前

    我试着去感受一下antlr3,我贴了 Expression evaluator 进入AntlWorks窗口(最新版本)并编译。它已成功编译并启动,但存在两个问题:

    • 正在尝试使用的输入 1+2*4/3; 1+2*43 .
    • 它在图形解析器树中显示的错误之一是 MissingTokenException(0!=0)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Amber    15 年前

    您链接到的示例不支持除法(只需查看代码,您会发现这里没有除法:

    expr returns [int value]
        :   e=multExpr {$value = $e.value;}
            (   '+' e=multExpr {$value += $e.value;}
            |   '-' e=multExpr {$value -= $e.value;}
            )*
    
        2
  •  1
  •   peter.murray.rust    15 年前

    我们经常

    MissingTokenException(0!=0)
    

    当我们犯错误的时候。我认为这意味着它找不到正在寻找的令牌,可能是由错误的令牌生成的。解析器有时可能会根据语法进行“恢复”。

    还请记住,LEXER在解析器之前运行,您应该检查哪些令牌实际传递给解析器。AntlrWorks调试器在这里非常有用。