Для языков с ключевыми словами должен быть какой-то особый трюк, чтобы не допустить, например, «если» интерпретироваться как идентификатор, а «ifSomeVariableName» стать ключевым словом «если», за которым следует идентификатор «SomeVariableName» в потоке токенов.
Для рекурсивного спуска и Lex / Yacc я просто воспользовался подходом (согласно полезной инструкции) преобразования потока токенов между лексером и анализатором.
Однако FParsec на самом деле некажется, сделайте отдельный шаг лексера, поэтому мне интересно, как лучше всего с этим справиться.Говоря о том, что, похоже, Parsec Haskell поддерживает слой лексера, а FParsec нет?