Skip to content

maestrow/ffparsec

Repository files navigation

Parsec lite - Облегченная версия библиотеки парсер-комбинаторов на F#

Существует отличная библиотека парсер-комбинаторов FParsec. Она хорошо документирована и оптимизирована по производительности.

Мотивы создания данной библиотеки:

  1. Возможность компилировать библиотеку в Javascript с помощью Fable.
  2. Удобство отладки грамматик. Представление конечной грамматики в виде дерева парсеров (см. например Irony - .NET Language Implementation Kit)
  3. Удобный синтаксис: let p = +'a' + "assad" ++ (' ' | "\r\n" | p2) * qty.[0..] => fun x y -> x + y (работы ведутся)

Данная библиотека создавалась на основе:

Структура проекта

Структуру проекта можно увидеть в панели Project Explorer в VS Code и посмотреть комментарии в Parsec.fsproj.

Несмотря на то, что процесс компиляции настроен так, чтобы эти папки src/bin и src/obj не создавались (благодаря опции BaseIntermediateOutputPath в Parsec.fsproj и опции --output в build.fsx результат компиляции попадает в папку /build), они создаются расширением ionide-fsharp при работе в VS Code. Поэтому, чтобы src/bin и src/obj не отвлекали от структуры проекта, для VS Code создана настройка в .vscode/settings.json не показывать эти папки в списке файлов (панель explorer).

Компиляция и запуск

Предварительные требования:

Компиляция:

fake build

Компиляция в javascript

npm i
cd src
dotnet restore
dotnet fable npm-run build

Результат будет помещен в output-js

Запуск тестов

  • run.bat параллельный запуск
  • ./runDetailed.bat (или ./run.cmd --sequenced --summary) - последовательно с детализацией.

Дальнейнее развитие

  • Веб-приложение для отладки.
  • OMeta синтаксис.

About

Lite version of FParsec, written completely in F#. Motivation - have an ability compile grammars to Javascript with Fable

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages