fastparse、parboiled2、scala-combinators を試しました。LEXERを定義するとき、それらはすべてこの問題を抱えています:
LET_KEYWORD ::= "let"
IDENTIFIER ::= "[a-zA-Z]+".r
入力に対してそれらを実行すると"leto"
、生成され[LET_KEYWORD,IDENTIFIER(o)]
ます。
これらのライブラリのいくつかは、次のような動作をすることを期待しています:
入力が の場合"let"
、最初に定義されたルールがより関連性が高いため、それを選択することであいまいさを解決します。入力が"leto"
存在する場合、あいまいさはなく、 のみが生成されIDENTIFIER(leto)
ます。それはここで説明されている動作です、ANTLR