私はANTLR4文法を定義しています。二重引用符の内側に表示されたときと二重引用符の外に出現するときとで、すべてではなく、あるものを別々にトークン化したいと思います。ここで私がこれまで持っている文法だ:ANTLR4 - 引用符の中で別々にトークン化するには?
grammar SimpleGrammar;
AND: '&';
TERM: TERM_CHAR+;
PHRASE_TERM: (TERM_CHAR | '%' | '&' | ':' | '$')+;
TRUNCATION: TERM '!';
WS: WS_CHAR+ -> skip;
fragment TERM_CHAR: 'a' .. 'z' | 'A' .. 'Z';
fragment WS_CHAR: [ \t\r\n];
// Parser rules
expr:
expr AND expr
| '"' phrase '"'
| TERM
| TRUNCATION
;
phrase:
(TERM | PHRASE_TERM | TRUNCATION)+
;
a! & b
を解析する際に上記の文法が正しくに解析した、作品:私は"a! & b"
を解析しようとしたときしかし、私が手
AND
/\
/ \
a! b
:
を行1:4の無関係な入力 '&' {{""、TERM、PHRASE_TERM、TRUNCATION}
&
がAND
とトークン化されているため、エラーメッセージが意味を持ちます。しかし、私がしたいのは、&
が二重引用符( "フレーズ"の内側)の中に現れたときにPHRASE_TERM
としてトークン化されます。注:フレーズ内に表示されている場合でも、a!
をTRUNCATION
としてトークン化します。
これは可能ですか?