我在这里使用mysql语法:https://github.com/antlr/grammars-v4/tree/master/mysql 并使用maven生成了java文件。现在,我试图解析一个查询,但我不知道怎么做。
我基本上想“获取”查询的所有不同组件,比如所选的列表列、where条件、子查询、表名等,但我不知道如何继续。我已经写了下面的代码到现在为止。有人能给我举个简单的例子,让我能理解它的用法并承担更复杂的任务吗?这是我的密码:
public static void main( String[] args )
{
String sql="select cust_name from database..table where cust_name like 'Kash%'";
ANTLRInputStream input = new ANTLRInputStream(sql);
MySqlLexer mySqlLexer = new MySqlLexer(input);
CommonTokenStream tokens = new CommonTokenStream(mySqlLexer);
MySqlParser mySqlParser = new MySqlParser(tokens);
ParseTree tree = mySqlParser.dmlStatement();
ParseTreeWalker walker = new ParseTreeWalker();
MySqlParserBaseListener listener=new MySqlParserBaseListener();
ParseTreeWalker.DEFAULT.walk(listener, tree);
System.out.println(?);
}
使用上述代码,我得到以下输出:
line 1:11 no viable alternative at input '_'
(dmlStatement _ . . _ 'Kash%')
感谢您的帮助:)
1条答案
按热度按时间flvtvl501#
我基本上想“获取”查询的所有不同组件,比如所选的列表列、where条件、子查询、表名等。
你的
tree
变量保存所有数据:ParseTree tree = mySqlParser.dmlStatement();
第1行:11在输入“\处没有可行的替代方案”如果你看看lexer规则:
关键字和标识符似乎不能包含小写字母。
如果你这样运行:
您将看到以下输出(缩进以便于阅读):