2017-03-29 8 views
0

私が実際に使っている文法ははるかに大きいですが、このスニペットは私の問題を示しています。ANTLR4:テストしていないルールに起因する無関係な入力

grammar test ; 

word: CHAR(CHAR|DIGIT)* ; 

DIGIT: [0-9] ; 
CHAR: [a-z] ; 
OR: 'or' ; 

「または」外来入力エラーを生成するのサブ文字列を含む任意の単語をルールwordを試験します。たとえば、次のように

こんにちは:FINE
antidisestablishmentarianism:FINE
時間または SE:ERROR

はなぜANTLRがこれを拾っていますか? orは使用されていません。

私はかなりこれがsame problem this person hadであると確信していますが、私はそれを理解するのに問題があります。

答えて

1

CHARルールは、テキストの長さ= 1と一致します。長さ= 2のORルール。したがって、レクサーはCHARルールに優先してorテキストシーケンスと一致するルールをORとして選択します。

つまり、レクサーは最長一致で文法順に基づいてルールを選択します。

+0

ねえ、ありがとう。これには簡単な解決策がありますか?私はこれがなぜそうであるのか理解するのに苦労しています。私はANTLRをよく理解していたので、それを捕まえてはならないように、「または」を探してはいけません。私の実際の文法では、「an」や「for」のような多くのルールがあります。私はしばらくの間、グーグルグーグルをしてきましたが、私は解決策を見つけることができません。 – LismUK

関連する問題