Java 如何加上「;作为「;为MySQL的ANTLR Lex文件提供别名支持?

Java 如何加上「;作为「;为MySQL的ANTLR Lex文件提供别名支持?,java,mysql,antlr,Java,Mysql,Antlr,使用此lex文件: 当我处理此声明时: String sql = "select x as gorp from FOO "; 我明白了: 第1:12行外部输入'gorp'应为{,'from','where',',} 我查看了上面列出的lex文件,没有AS的定义 如何使ANTLR lex和语法定义文件与包含“AS”关键字的MySQL SELECT语句一起工作?解析器不知道AS关键字。在mysql中,这可以省略 列的解析器定义为: 列名 :((模式名称点)?ID点)?ID(列名称别名)?

使用此lex文件:

当我处理此声明时:

    String sql = "select x as gorp from FOO ";
我明白了: 第1:12行外部输入'gorp'应为{,'from','where',',}

我查看了上面列出的lex文件,没有AS的定义


如何使ANTLR lex和语法定义文件与包含“AS”关键字的MySQL SELECT语句一起工作?

解析器不知道
AS
关键字。在mysql中,这可以省略

列的解析器定义为:

列名 :((模式名称点)?ID点)?ID(列名称别名)?(表别名点)?ID |用户_变量(列_名称_别名)? ;

所以只需删除“as”关键字


修复尝试:或者,更改g4文件

在MySQLLexer.g4中,添加

在MySQLParser.g4中,更新列名定义

column_name : ( ( schema_name DOT )? ID DOT )? ID ( ( AS )? column_name_alias )? | ( table_alias DOT )? ID | USER_VAR ( ( AS )? column_name_alias )? ;
理想情况下,表定义也可以有别名

table_atom : ( table_name ( partition_clause )? ( ( AS )? table_alias )? ( index_hint_list )? ) | ( subquery subquery_alias ) | ( LPAREN table_references RPAREN ) | ( OJ table_reference LEFT OUTER JOIN table_reference ON expression ) ;

解析器不知道
作为
关键字。在mysql中,这可以省略

列的解析器定义为:

列名 :((模式名称点)?ID点)?ID(列名称别名)?(表别名点)?ID |用户_变量(列_名称_别名)? ;

所以只需删除“as”关键字


修复尝试:或者,更改g4文件

在MySQLLexer.g4中,添加

在MySQLParser.g4中,更新列名定义

column_name : ( ( schema_name DOT )? ID DOT )? ID ( ( AS )? column_name_alias )? | ( table_alias DOT )? ID | USER_VAR ( ( AS )? column_name_alias )? ;
理想情况下,表定义也可以有别名

table_atom : ( table_name ( partition_clause )? ( ( AS )? table_alias )? ( index_hint_list )? ) | ( subquery subquery_alias ) | ( LPAREN table_references RPAREN ) | ( OJ table_reference LEFT OUTER JOIN table_reference ON expression ) ;


语法库中的MySQL只是一个非常简单的变体,缺少该语言的许多内容。相反,请尝试我的ANTLR3语法:并根据ANTLR4进行调整。这一个是100%完整的。

语法存储库中的MySQL只是一个非常简单的变体,缺少该语言的许多内容。相反,请尝试我的ANTLR3语法:并根据ANTLR4进行调整。这一个是100%完整的。

嗯,可以省略,但也可以包括在内。如果包含语法分析器,则语法分析器将失败。我将向g4文件添加什么?已编辑以包含更改为g4文件的内容。不起作用。它将单词解释为别名。我不知道解析器的运算符优先级。您可以将
设为强制关键字吗?我需要能够处理来自任何源的语法有效的MySQL语句。我很难过g4文件不全面,但乞丐不能选择。好吧,它可以省略,但也可以包括在内。如果包含语法分析器,则语法分析器将失败。我将向g4文件添加什么?已编辑以包含更改为g4文件的内容。不起作用。它将单词解释为别名。我不知道解析器的运算符优先级。您可以将
设为强制关键字吗?我需要能够处理来自任何源的语法有效的MySQL语句。我很难过g4文件不全面,但乞丐不能选择。这是基于意见的。除了最初的开发者,没有人知道为什么。考虑电子邮件给他。“米迦勒,我认为大多数开发者理解我的观点。这里的问题是什么?”EIS的问题是“我如何使ANTLR LEX和语法定义文件与MySQL选择语句一起工作,这些语句中有“AS关键字”?@ NICOMPOK,修正了一个问题,即这是基于意见的。除了最初的开发者,没有人知道为什么。考虑电子邮件给他。“米迦勒,我认为大多数开发者理解我的观点。这里的问题是什么?”EIS的问题是“我如何使ANTLR LEX和语法定义文件与MySQL选择语句一起工作,这些语句中有“AS”关键字?修正了这样一个问题,即是否有一个针对ANTLR 4的“调整”指南?我认为它不会生成Java。生成的源代码必须是C语言,对吗?语法的调整非常简单。只需遵循ANTLR4工具告诉您的内容。语法是为Antlr3C目标编写的,对吧,但是将小C代码转换成Java应该很容易。您还可以从删除所有目标代码开始,让编译器告诉您缺少什么。然后根据语法中的内容添加函数模型。有没有关于ANTLR 4“调整”的指南?我认为它不会生成Java。生成的源代码必须是C语言,对吗?语法的调整非常简单。只需遵循ANTLR4工具告诉您的内容。语法是为Antlr3C目标编写的,对吧,但是将小C代码转换成Java应该很容易。您还可以从删除所有目标代码开始,让编译器告诉您缺少什么。然后根据语法中的内容添加函数。