我按照这里的指南使用antlr生成go-mysql解析器代码,但我得到了一些错误,如下所示:
C:UsersmoyuduoDesktopantlrmysql>java org.antlr.v4.Tool -Dlanguage=Go MySQLLexer.g4
C:UsersmoyuduoDesktopantlrmysql>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关键字不冲突的内容。
我相信你会在其他报告中发现类似的案例。
语法的作者很难避免在所有目标语言中以避免冲突的方式命名事物,所以会出现这样的事情。