2014-11-27 4 views
6

Я хочу использовать FParsec для языка, подобного python, с отступом.Можно ли разобрать «off-side» (на основе отступа) языки с помощью fparsec?

Я понимаю, что это должно быть сделано в фазе лексинга, но FParsec не имеет фазы лексинга. Можно ли использовать FParsec, или, как его можно кормить после lexing?

P.D: Я новичок в F #, но опыт в других языках

ответ

9

Да, это возможно.

Здесь автор relevant article автор FParsec. Если вы хотите углубиться в эту тему, this paper может стоить того. В документе указывается, что существует несколько пакетов для синтаксического анализа с учетом отступа, основанного на Parsec, комбинатор-парсер, который вдохновляет FParsec.

FParsec не имеет отдельной фазы лексинга, но вместо этого он сплавляет лексирование и синтаксический анализ на одну фазу. Инициализация с учетом отступа ИМО лучше делать с комбинаторами парсеров (FParsec), чем генераторы парсеров (fslex/fsyacc). Причина в том, что вам нужно вручную отслеживать текущий отступ и сообщать хорошие сообщения об ошибках на основе контекстов.