我正在尝试构建一个简单的搜索表达式,但无法获得以下语法的正确答案。
Here are my sample search text
LOB WHERE
Line of Business WHERE
Line of Business WHERE
正如您在上面的搜索中看到的,前几个词反映了搜索关键字,后面跟着where条件,我想捕获可以包括空格的搜索关键字。共享以下示例语法,但似乎无法正确解析
sqlsyntax : identifierws 'WHERE';
identifierws : (WSID)+;
WSID: [a-zA-Z0-9 ] ; // match identifiers with space
WS : [ trn]+ -> skip ; // skip spaces, tabs, newlines
感谢在这方面提供的任何帮助。
当我试图解析业务线WHERE
我收到以下错误行1:0在输入"行"处没有可行的替代方案我得到了"业务范围"文本,但空白被修剪了,我想要确切的文本"业务范围》,这是我有点挣扎的地方。
identeriferws
规则正在消耗所有文本。更好地优先识别lexer中的关键词:
sqlsyntax : identifierws WHERE identifierws EQ STRING EOF ;
identifierws : (WSID)+;
WHERE: 'WHERE';
EQ : '=' ;
STRING : ''' .? ''' ;
WSID: [a-zA-Z0-9 ] ;
WS : [ trn]+ -> skip ;
对于这样一个简单的情况,我不会使用解析器。这太夸张了。你所需要做的就是在输入中获得当前位置,然后搜索WHERE(一个简单的boyer-moore搜索)。然后将起始位置和WHERE位置之间的文本作为输入。跳过WHERE并将起始位置设置为当前位置。之后再次进行相同的搜索等。