Как сопоставить переводы строк с Алексом / Хаскеллом - PullRequest
2 голосов
/ 24 июля 2010

Я позаимствовал пример, представленный здесь

http://www.haskell.org/alex/doc/html/introduction.html

Я пытаюсь создать интерпретатор для числовых выражений.(только литералы, без переменных) И я хочу, чтобы переводы строк разделяли два разных выражения.К сожалению, когда я делаю это

$ ignoredWhite = [\ t \ f \ v \ r] - игнорируемые пробелы

$ newline = "\ n" --new line

Alex (v 2.2) прерывает компиляцию.Я попытался

$ newline = \ n --new line

, но это просто приводит к тому, что прерывание перемещается из alex в окончательный двоичный файл (он же генерируется ghc), когда он читаетвход.

Как мне исправить это?

Ответы [ 2 ]

3 голосов
/ 27 декабря 2012

Этот вопрос действительно старый, тем не менее я опубликую свой ответ для будущих посетителей.Когда токены определены, я приказываю alex обработать все пробелы:

tokens :-
  $white {\p s -> checkWhite p $ head s} 

checkWhite выглядит так:

checkWhite :: AlexPosn -> Char -> Token
checkWhite p '\n' = TNewLine p
checkWhite p _ = TEmpty

Как вы можете видеть, он выводит специальный токен, когдановая строка встречается.Чтобы удалить TEmpty из вывода, вы можете использовать ... filter (\= TEmpty) $ alexScanTokens ....

1 голос
/ 24 июля 2010

Просто предположение - вы пробовали включить его в диапазон символов?

$newline = [\n]
...