使用antlr4生成go代码get symbol type conflicts错误

use antlr4 to generate go code get symbol type conflicts error

我按照指南 here 使用 antlr 生成 go mysql 解析器代码,但我遇到了一些错误,如下所示:

C:\Users\moyuduo\Desktop\antlr\mysql>java org.antlr.v4.Tool -Dlanguage=Go MySQLLexer.g4

C:\Users\moyuduo\Desktop\antlr\mysql>java org.antlr.v4.Tool -Dlanguage=Go MySQLParser.g4
error(134): MySQLParser.g4:476:61: symbol type conflicts with generated code in target language or runtime
error(134): MySQLParser.g4:757:18: symbol type conflicts with generated code in target language or runtime
error(134): MySQLParser.g4:776:22: symbol type conflicts with generated code in target language or runtime
error(134): MySQLParser.g4:1301:6: symbol type conflicts with generated code in target language or runtime
error(134): MySQLParser.g4:1305:4: symbol type conflicts with generated code in target language or runtime
error(134): MySQLParser.g4:1687:4: symbol type conflicts with generated code in target language or runtime
...

但是用antlr生成java代码是可以的,为什么? 有人帮帮我吗?

type 是 Go 上的关键字。 MySQLParger.g4 文件中的第 476 行是:

AGGREGATE_SYMBOL? FUNCTION_SYMBOL udfName RETURNS_SYMBOL type = (

您需要将该行中的 type 更改为与 Go 关键字不冲突的内容。

我相信您会在其他报告中找到类似的案例。

语法作者很难避免以避免在所有目标语言中发生冲突的方式命名事物,所以会出现这样的事情。