我正在尝试构建简单的搜索表达式,并且无法正确回答下面的语法。
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 : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
对此方面的任何帮助表示赞赏。
这是我尝试解析时发生的事情 业务线WHERE
我收到以下错误 第1:0行没有可行的选择在输入'线' 我找回了LineofBusiness文本,但是空白被修剪了,我想要精确的文本业务线,这是我在苦苦挣扎的地方。
答案 0 :(得分:1)
identeriferws
规则正在使用所有文字。最好在词法分析器中确定关键字的识别优先级:
sqlsyntax : identifierws WHERE identifierws EQ STRING EOF ;
identifierws : (WSID)+;
WHERE: 'WHERE';
EQ : '=' ;
STRING : '\'' .? '\'' ;
WSID: [a-zA-Z0-9 ] ;
WS : [ \t\r\n]+ -> skip ;
答案 1 :(得分:0)
对于这种简单的情况,我不会使用解析器。这太过分了。您需要做的就是获取输入中的当前位置,然后搜索WHERE(简单的boyer-moore搜索)。然后将起始位置和WHERE位置之间的文本作为输入。跳过WHERE并将开始位置设置为您所在的位置。之后再进行相同的搜索等。