孤独な単語と引用符で囲まれた文字列をトークン化するレクサーを構築しようとしています。私は以下を得ました:
STRING: QUOTE (options {greedy=false;} : . )* QUOTE ;
WS : SPACE+ { $channel = HIDDEN; } ;
WORD : ~(QUOTE|SPACE)+ ;
まれなケースでは、次を解析する必要があります。
"string" word1" word2
3 つのトークン"string"
として: STRING およびword1"
WORDword2
として。基本的に、最後の引用符がある場合、それは WORD の一部である必要があります。引用符が空白で囲まれている場合は、WORD である必要があります。
WORD に対してこのルールを試しましたが、成功しませんでした。
WORD: ~(QUOTE|SPACE)+
| (~(QUOTE|SPACE)* QUOTE ~QUOTE*)=> ~(QUOTE|SPACE)* QUOTE ~(QUOTE|SPACE)* ;