Подтвердить что ты не робот

Как комбинаторы парсера Scala сравниваются с Haskell Parsec?

Я прочитал, что компиляторы анализатора Haskell (в Parsec) могут анализировать контекстно-зависимые грамматики. Это также верно для комбинаторов парсеров Scala? Если да, то это функция "в" (ака " → " ) для?

Каковы сильные/слабые стороны реализации Scala комбинаторов парсеров, vs Haskell? Принимают ли они один и тот же класс грамматик? Легче ли создавать сообщения об ошибках или делать другие полезные вещи с помощью одного или другого?

Как синтаксический анализ пакетов (введенный в Scala 2.8) вписывается в это изображение?

Есть ли веб-страница или какой-либо другой ресурс, который показывает, как разные операторы/функции/DSL-сахар из одного языка реализуются на другом?

4b9b3361

Ответ 1

У вас много вопросов!

Сравнение parsec (который является только одной из многих библиотек-компиляторов анализатора Haskell) для реализации Scala parsec

Никто не сделал сравнения здесь, так как код Scala является довольно новым, но проверьте документацию:

Обратите внимание, что у Haskell есть много других библиотек комбинаторных парсеров, если вас интересует этот подход, например

Каковы некоторые сильные/слабые стороны реализации Scala комбинаторов парсеров, vs Haskell's?

Код Haskell более десяти лет, хорошо понят, и есть много примеров, много документации и случаев пользователей. Scala материал относительно новый.

анализ паркета

Разбор packrat полностью отличается. Оригинальная packrat paper была разработана в Haskell, но с тех пор стала более распространенной.

Есть ли веб-страница или какой-либо другой ресурс, который показывает, как разные операторы/функции/DSL-сахар из одного языка реализуются на другом?

Нет, но это было бы круто. Тем не менее, почти все (?) Библиотеки парсеров-парсеров основаны на новаторской реализации парсека, поэтому они имеют много общего с исходным парсеком.

Ответ 2

Также существует следующий технический отчет:

Комбинированные компоненты в Scala

Комбинированные компоненты Parser хорошо известны в функциональных языках программирования, таких как Haskell. В этой статье мы описываем, как они реализуются как библиотека в Scala, функциональном объектно-ориентированном языке. Благодаря гибкому синтаксису Scala мы можем близко аппроксимировать нотацию EBNF, поддерживаемую выделенными генераторами парсера. Для непосвященных мы сначала объясним концепцию комбинаторов парсеров, разработав минимальную библиотеку с нуля. Затем мы перейдем к подробному описанию существующей библиотеки Scala, включая ее поддержку для обозначения привязки переменной как части синтаксиса. Мы приводим несколько реалистичных примеров, иллюстрирующих полезность нашей библиотеки.

report.pdf(324K)