Я пишу парсер выражений для приложения, написанного в основном в Scala. Я построил объекты AST в Scala, и теперь вам нужно написать синтаксический анализатор. Я слышал о Scala встроенных комбинаторах парсеров, а также ANTLR3, и мне интересно: что обеспечило бы лучшую производительность и удобство написания кода? До сих пор:
Преимущества ANTLR
- Известное
- Fast
- Внешний DSL
- ANTLRWorks (отличная среда IDE для отладки/тестирования грамматического парсера)
ANTLR cons
- На основе Java (Scala interop может быть сложно, любой опыт?)
- Требуется большая зависимость во время выполнения
Parser combinator pros
- Часть Scala
- Еще один шаг сборки
- Нет необходимости в зависимости от времени выполнения; например уже включен в библиотеку времени Scala
Комбинировщик парсера
- Внутренняя DSL (может означать медленное выполнение?)
- Нет ANTLRWorks (обеспечивает хорошие функции анализа и визуализации парсера)
Любые мысли?
EDIT: Этот синтаксический анализатор анализирует выражения алгебраического/исчисления. Он будет использоваться в приложении Magnificalc для Android, когда он будет завершен.