2010-07-24 81 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 ...