2010-07-24 84 views
2

換行,我借的例子這裏介紹如何匹配與亞歷克斯/哈斯克爾

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

我試圖做出數值表達式的解釋。 (只有文字,沒有變量)而我希望換行符分隔兩個不同的表達式。 Unfortunaltely,當我爲此

$ ignoredWhite = [\噸\˚F符\ v \ R] - 忽略空白

$換行符= 「\ n」 個--new線

亞歷克斯(V 2.2 )中止編譯。我曾嘗試

$換行符= \ n - 新線

但只是導致(又名一個由GHC生成)中止從亞歷克斯轉移到最終的二進制,當讀取輸入。

如何去修復呢?

回答

1

只是一個猜測 - 你有沒有試過把它包括在一個字符範圍內?

$newline = [\n] 
+0

是的。它也不以那種方式工作。 – 2010-07-24 17:23:31

+0

中止編譯時是否發生錯誤? – Gian 2010-07-24 17:37:37

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