Antlr4输入符号

时间:2016-09-21 17:06:00

标签: intellij-idea antlr4

我正在实现一个简单的程序walker语法,我在多行中得到了这个常见错误。我认为这是由同样的原因造成的,但我是antlr的新手,所以我无法理解。

例如,在以下代码段中:

program
  : (declaration)*
    (statement)*
    EOF!
  ;

我收到了错误:

  

在输入'!'

时没有可行的选择

EOF之后,我遇到了类似的错误:

declaration
  : INT VARNUM '=' expression ';'
  -> ^(DECL VARNUM expression)
  ;

我收到了错误:

  

输入' - >'

没有可行的选择

在阅读其他问题后,我知道将一个令牌与多个定义匹配会导致此问题。但我还没有用任何输入测试它,我在intelliJ中遇到了这个错误。我该如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

这是ANTLR v3语法,您正尝试使用ANTLR v4编译它,这将无效。

要么降级到ANTLR v3,要么使用v4语法。不同之处在于v4不支持自动生成AST,并且您正在尝试使用已删除的AST构造运算符。

第一个代码段只要求您删除 >>> (1024).to_bytes(2, byteorder='big') b'\x04\x00' >>> (1024).to_bytes(10, byteorder='big') b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' >>> (-1024).to_bytes(10, byteorder='big', signed=True) b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00' >>> x = 1000 >>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little') b'\xe8\x03' 。括号不是必需的。

!

至于第二个,删除program : declaration* statement* EOF ;

之后的所有内容
->

如果您需要使用v4构建AST,请参阅my answer here