2010-07-24 2 views
2

Я позаимствовал пример, представленный здесьКак соответствовать новой строки с Alex/Haskell

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

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

$ ignoredWhite = [\ т \ F \ v \ г] - игнорируются пробельные

$ = перевод строки "\ п" --new линии

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

$ = новая строка \ п --Новогодние линии

, но это просто вызывает прерывание, чтобы перейти от Alex окончательного двоичного файла (он же один сгенерированный GHC), когда он читает входные данные.

Как я могу это исправить?

ответ

1

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

$newline = [\n] 
+0

Да. Так не получается. –

+0

Это ошибка при прерывании компиляции? – Gian

2

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

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 ....