Для языков с ключевыми словами необходимо выполнить некоторые специальные обманки, чтобы, например, предотвратить «если» интерпретироваться как идентификатор, а «ifSomeVariableName» - стать ключевым словом «if», за которым следует идентификатор «SomeVariableName» в токене поток.Идентификаторы FParsec и ключевые слова
Для рекурсивного спуска и Lex/Yacc я просто применил подход (в соответствии с полезной инструкцией) для преобразования потока токенов между лексером и парсером.
Однако FParsec, похоже, не делает отдельного лексерского шага, поэтому мне интересно, как лучше всего справиться с этим. Говоря о, кажется, что Parsec Haskell поддерживает лексерский слой, но FParsec этого не делает?
Мне нравится ваш второй процесс. Он в основном делает то же самое, что и лексерский постпроцессорный трюк, но просто встроен. В 20/20 задним числом это самый очевидный решение :). Спасибо – Hans
Определение 'pKeyword' в приведенном выше ответе меня сбивает с толку.Мой вывод типа показывает, что это «Parser», который не является (IMHO), что вы хотите - вы хотите вернуть «Parser » или сбой, завернутый в тип «Reply», и я не вижу, как достичь что с помощью оператора '| >>'? –
Sam
@Sam, спасибо, что указали это. Я обновил правило охраны. В зависимости от специфики домена, также может потребоваться обернуть синтаксический анализатор (ы) в «попытку». Надеюсь это поможет. – bytebuster