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