我正在尝试构建一个词法分析器来标记单独的单词和引用的字符串。我得到以下信息:
STRING: QUOTE (options {greedy=false;} : . )* QUOTE ;
WS : SPACE+ { $channel = HIDDEN; } ;
WORD : ~(QUOTE|SPACE)+ ;
对于极端情况,它需要解析:
"string" word1" word2
作为三个标记:"string"
作为 STRINGword1"
和word2
作为 WORD。基本上,如果有最后一个引号,它必须是 WORD 的一部分。如果引号被空格包围,它应该是一个 WORD。
我为 WORD 尝试了这条规则,但没有成功:
WORD: ~(QUOTE|SPACE)+
| (~(QUOTE|SPACE)* QUOTE ~QUOTE*)=> ~(QUOTE|SPACE)* QUOTE ~(QUOTE|SPACE)* ;