我正在编写一个 JAVA 软件来解析 SQL 查询。为此,我将 ANTLR 与 presto.g4 一起使用。我目前使用的代码非常标准:
PrestoLexer lexer = new PrestoLexer(
new CaseChangingCharStream(CharStreams.fromString(query), true));
lexer.removeErrorListeners();
lexer.addErrorListener(errorListener);
CommonTokenStream tokens = new CommonTokenStream(lexer);
PrestoParser parser = new PrestoParser(tokens);
我想知道是否可以将参数传递给词法分析器,因此词法分析会有所不同取决于该参数?
更新: 我在下面使用了@Mike 的建议,我的词法分析器现在继承自内置词法分析器并添加了一个谓词函数。我的问题现在是纯语法。
这是我的字符串定义:
STRING
: '\'' ( '\\' .
| '\\\\' . {HelperUtils.isNeedSpecialEscaping(this)}? // match \ followed by any char
| ~[\\'] // match anything other than \ and '
| '\'\'' // match ''
)*
'\''
;
我有时会有一个奇怪的转义查询,谓词返回 true。例如:
select
table1(replace(replace(some_col,'\\'',''),'\"' ,'')) as features
from table1
当我尝试解析它时,我得到:'\'',''),'
作为单个字符串。我该如何处理这个?