Я пробовал fastparse, parboiled2 и scala-combinators. У них всех есть эта проблема при определении LEXER:
LET_KEYWORD ::= "let"
IDENTIFIER ::= "[a-zA-Z]+".r
Когда я запускаю их на входе "leto"
, они производят [LET_KEYWORD,IDENTIFIER(o)]
.
Я ожидаю, что некоторые из этих библиотек дадут мне такое поведение:
если ввод равен "let"
, то двусмысленность устраняется путем выбора первого определенного правила, потому что оно более актуально. если на входе "leto"
, то двусмысленности нет и выдается только IDENTIFIER(leto)
. Это поведение описано здесь, в ANTLR