使用这个lex文件:https://github.com/antlr/grammars-v4/blob/master/mysql/MySQLLexer.g4
当我处理这份声明时:
String sql = "select x as gorp from FOO ";我知道:行1:12外来输入'gorp‘期望{,'from','where',’','}
我查看了上面列出的lex文件,对AS没有任何定义。
如何使ANTLR和语法定义文件与具有"AS“关键字的MySQL SELECT语句一起工作?
发布于 2017-05-28 19:53:27
解析器不知道as关键字。在mysql中,可以省略这一点。
该列的解析器定义为:
column_name:( schema_name DOT )?我的身份)?ID ( column_name_alias )? x( table_alias DOT )?ID = USER_VAR ( column_name_alias );
因此,只需删除"as“关键字。
修复尝试:或者,更改g4文件
在MySQLLexer.g4中,追加
AS
: 'as'
;在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 ) ;发布于 2017-05-29 06:37:54
语法存储库中的MySQL只是一个非常简单的变体,缺少了该语言的许多东西。相反,尝试我的ANTLR3语法:https://github.com/mysql/mysql-workbench/tree/master/library/parsers/grammars并调整它以适应ANTLR4。这个是100%完整的。
https://stackoverflow.com/questions/44231379
复制相似问题