Pull to refresh

Comments 11

А почему взяли именно встроенную в скала библиотеку, а не сторонние парсеры? Parboiled2 или FastParse например.

Именно потому, что она была встроенной в язык (но уже нет). Ещё мне понравились синтаксис DSL и идея packrat парсеров.

На самом деле уже нет — это довольно давно отдельная библиотека.
Но к остальным библиотекам не найти такого хорошего описания, как в Programming in Scala.
У остальных парсеров DSL не хуже. Просто надо выбрать, какой из DSL учить.
У встроенных парсер-комбинаторов есть одна проблема — они ужасно тормозные. За этим исключением, почему бы и нет.
Не обязательно покупать второе издание Programming in Scala, чтоб почитать про парсеры — в первом почти то же самое, но доступно совершенно свободно. Programming in Scala/Combinator Parsing

Вызывать методы _N вручную все-таки не стоит. Предполагается их использовать следующим образом:
    private def binOperation(p: Expression ~ String ~ Expression) = p match {
        case e1 ~ op ~ e2 => BinOperation(e1, BinOperator(op), e2)
    }


Вместо PackratParser можно использовать rep1, слегка усложнив метод binOperation.

Большое cпасибо, сейчас исправлю.

Чем не угодил antlr парсер? У них там из папки примеров можно готовые грамматики взять.

Наверное тем, что там нельзя опеделить грамматику непосредственно в Scala-коде.
Опредилить грамматику в runtime? Не-а? В смысле — не просто в коде, а после компиляции.
Для сравнения:

длинный пример на java
короткий, но непонятный пример на C#


Ну так нечестно. Взяли бы parboiled, и получили бы на java почти такой же, хотя возможно и не такой красивый парсер. С теми же достоинствами (и недостатками).
Sign up to leave a comment.

Articles

Change theme settings