Существует отличная библиотека парсер-комбинаторов FParsec. Она хорошо документирована и оптимизирована по производительности.
Мотивы создания данной библиотеки:
- Возможность компилировать библиотеку в Javascript с помощью Fable.
- Удобство отладки грамматик. Представление конечной грамматики в виде дерева парсеров (см. например Irony - .NET Language Implementation Kit)
- Удобный синтаксис:
let p = +'a' + "assad" ++ (' ' | "\r\n" | p2) * qty.[0..] => fun x y -> x + y
(работы ведутся)
Данная библиотека создавалась на основе:
- идей и кода FParsec
- серии статей Understanding Parser Combinators
- Библиотеки http://rspeele.github.io/FParsec-Pipes
Структуру проекта можно увидеть в панели 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).
Предварительные требования:
- Paket-Bootstrap
- FAKE5
dotnet tool install fake-cli -g --version=5.0.0-*
или другие способы получить fake: https://github.com/FakeBuild/fake-bootstrap/.
Компиляция:
fake build
npm i
cd src
dotnet restore
dotnet fable npm-run build
Результат будет помещен в output-js
run.bat
параллельный запуск./runDetailed.bat
(или./run.cmd --sequenced --summary
) - последовательно с детализацией.
- Веб-приложение для отладки.
- OMeta синтаксис.