Antlr4 在输入符号处没有可行的替代方案
Antlr4 No viable alternative at input symbols
我正在实现一个简单的程序遍历器语法,但我在多行中遇到了这个常见错误。我认为这是由同样的原因引起的,但我是 antlr 的新手,所以我无法弄清楚。
例如,在以下代码片段中:
program
: (declaration)*
(statement)*
EOF!
;
我收到错误:
No viable alternative at input '!'
在 EOF
之后,我遇到了类似的错误:
declaration
: INT VARNUM '=' expression ';'
-> ^(DECL VARNUM expression)
;
我收到错误:
No viable alternative at input '->'
看了其他问题,才知道一个token匹配多个定义会导致这个问题。但是我还没有用任何输入测试它,我在 intelliJ 中遇到了这个错误。我该如何解决我的问题?
这是 ANTLR v3 语法,你正试图用 ANTLR v4 编译它,这是行不通的。
要么降级到 ANTLR v3,要么使用 v4 语法。不同之处在于 v4 不支持自动 AST 生成,而您正尝试使用 AST 构造运算符,但已被删除。
第一个片段只需要您删除 !
。括号不是必需的。
program
: declaration*
statement*
EOF
;
至于第二个,删除 ->
:
之后的所有内容
declaration
: INT VARNUM '=' expression ';'
;
如果您需要使用 v4 构建 AST,请参阅 。
我正在实现一个简单的程序遍历器语法,但我在多行中遇到了这个常见错误。我认为这是由同样的原因引起的,但我是 antlr 的新手,所以我无法弄清楚。
例如,在以下代码片段中:
program
: (declaration)*
(statement)*
EOF!
;
我收到错误:
No viable alternative at input '!'
在 EOF
之后,我遇到了类似的错误:
declaration
: INT VARNUM '=' expression ';'
-> ^(DECL VARNUM expression)
;
我收到错误:
No viable alternative at input '->'
看了其他问题,才知道一个token匹配多个定义会导致这个问题。但是我还没有用任何输入测试它,我在 intelliJ 中遇到了这个错误。我该如何解决我的问题?
这是 ANTLR v3 语法,你正试图用 ANTLR v4 编译它,这是行不通的。
要么降级到 ANTLR v3,要么使用 v4 语法。不同之处在于 v4 不支持自动 AST 生成,而您正尝试使用 AST 构造运算符,但已被删除。
第一个片段只需要您删除 !
。括号不是必需的。
program
: declaration*
statement*
EOF
;
至于第二个,删除 ->
:
declaration
: INT VARNUM '=' expression ';'
;
如果您需要使用 v4 构建 AST,请参阅