値に空白以外のものを含めることができるペアのリストを解析しようとしてName=Value
います (つまり、値に等号を含めることができます)。
名前は、通常の識別文字に制限されています。
問題は、「値」トークンがすべてに一致することです。たとえば、入力の場合:
dude=sweet
パーサーは入力全体を 'Value' トークンと照合します (そして をスローしますMismatchedTokenException
)。
bisonでは、状態をトークンに割り当てる可能性がありました (または、これは非終端記号のためだけでしたか?) ため、その状態への明示的な移行後にのみマッチングの「適格」になります。
編集考えてみると、これはバイソンでも機能しません-トークンの分割はすでに行われています(flex)。REJECT
ただし、トークンへの方法があったと思います。フレックストライに次善のマッチを強制します。
これが私のANTLR文法です。
grammar command_string;
start
: commandParam* EOF
;
commandParam
: IDENTIFIER '=' CONTINUOUS_VALUE
;
IDENTIFIER
: ('-'|'_'|'a'..'z'|'A'..'Z'|'0'..'9')+
;
CONTINUOUS_VALUE
: ~( ALL_WS )+
;
WS
: (ALL_WS) + { $channel = HIDDEN; }
;
fragment ALL_WS
: ' ' | '\t' | '\r' | '\n'
;