0
を解析に失敗:シンプルな文法は、私は次のような単純なANTLR文法を持っている
grammar Grammar;
grammarRules : grammarRule+ ;
grammarRule:
lhs '->' WORD+
;
lhs: ID ;
WORD : LETTER+ ;
ID : LETTER (LETTER|'0'..'9')* ;
fragment
LETTER : [a-zA-Z\u0080-\u00FF_] ;
WS : [ \t] -> skip ;
私は、文字列「Webページ - > Google検索」を解析しようとすると、私はエラーを取得:
line 1:0 mismatched input 'webpage' expecting ID
だから、大きなポイントは、レクサーがパーサのステップとは全く別の層として実行されているように見えるので、レクサーはあいまいさの場合に何をするかを決める責任があります。その点で、私は文ターミネータを追加するとあいまいさの問題を解決するのはなぜか不思議です。 –
@DanielBighamそうです。おそらくそれでは不十分です。あなたは 'lhs - > ID |のような何かをしなければならないでしょう。 WORD'。 ANTLRパーサはLL(*)なので、おそらくラインターミネータは必要ありません。 (もし彼らがLL(1)だったとしたら、 – Gene
これは後で見つかるかもしれない人たちのために、私はAntlrであらゆる種類の奇妙な振る舞いをしていましたが、私は文法をリファクタリングして主要な文法は、異なる記号を持つ多くの規則に分解されるのではなく、単一の規則に含まれます。これは明らかに文法の左回帰をより良く扱うことを可能にする。 Presto、今はうまくいっています。 –