Есть ли EDKL на Haskell для написания лексеров? - PullRequest
12 голосов
/ 13 октября 2011

Смешение фаз лексера и синтаксического анализа в одной фазе иногда делает синтаксические анализаторы Parsec менее читаемыми, но также замедляет их. Одним из решений является использование Alex в качестве токенизатора, а затем Parsec в качестве парсера потока токенов.

Это хорошо, но было бы еще лучше, если бы я мог избавиться от Алекса, потому что он добавляет одну фазу предварительной обработки в конвейер компиляции, плохо интегрируется с "IDE" haskell и т. Д. Мне было интересно, было ли такое что-то вроде EDSL на Haskell для описания токенизаторов, очень в стиле Алекса, но в виде библиотеки.

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Да - http://www.cse.unsw.edu.au/~chak/papers/Cha99.html

До Hackage Мануэль выпускал код в пакете под названием CTK (набор инструментов компилятора). Я не уверен, каков статус проекта в эти дни.

Я думаю, что лексер Томаса Халлгрена из статьи "Lexing Haskell in Haskell" был скорее динамическим, чем генератором кода, в то время как релиз адаптирован для лексирования Haskell, механизм в библиотеке более общий. Явор Дьячки поместил код на Hackage.

http://hackage.haskell.org/package/haskell-lexer

3 голосов
/ 13 октября 2011

Вы также можете использовать Parsec в качестве лексера.Сначала вы разбираете строку в токены, затем разбираете токены в целевой тип данных.

...