ANTLR-处理标识符中的空白



我正在尝试构建一个简单的搜索表达式,但无法获得以下语法的正确答案。

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并将起始位置设置为当前位置。之后再次进行相同的搜索等。

相关内容

  • 没有找到相关文章

最新更新