2016-09-21 68 views
0

我正在实现一个简单的程序walker语法,并且我在多行中得到这个常见错误。我认为这是由同样的原因造成的,但我对antlr很陌生,所以我无法弄清楚。Antlr4在输入符号处没有可行的替代方案

例如,在这个下面的代码片段:

我有错误
program 
    : (declaration)* 
    (statement)* 
    EOF! 
    ; 

No viable alternative at input '!'

EOF后,我得到了一个类似的错误:

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

我出现错误:

No viable alternative at input '->'

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

回答

1

这是ANTLR v3的语法,你试图用ANTLR v4编译它,这是行不通的。

要么降级到ANTLR v3,要么使用v4语法。不同之处在于v4不支持自动生成AST,而您尝试使用已删除的AST构建操作符。

第一个片段只要求您删除!。括号不是必需的。

program 
    : declaration* 
    statement* 
    EOF 
    ; 

至于第二个,->后删除一切:

declaration 
    : INT VARNUM '=' expression ';' 
    ; 

如果你需要建立与V4的AST,看到my answer here

+0

谢谢,它解决了我的问题 –

相关问题