如何将换行符与Alex / Haskell进行匹配
我借用了这里介绍的例子
http://www.haskell.org/alex/doc/html/introduction.html
我正在尝试为数字表达式做一个解释器。 (只有文字,没有变量)而我希望换行符分隔两个不同的表达式。 不幸的是,当我这样做
$ ignoredWhite = [ t f v r] - 忽略空白
$ newline =“ n” - 新行
亚历克斯(2.2版)中止汇编。 我努力了
$ newline = n - 新行
但是当它读取输入时,这只会导致中止从alex转移到最终的二进制文件(也就是由ghc生成的二进制文件)。
我该如何解决这个问题?
这个问题真的很老,但我会为未来的访问者发布我的答案。 当令牌被定义时,我告诉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 ...
只是猜测 - 你有没有试过把它包括在一个字符范围内?
$newline = [n]
链接地址: http://www.djcxy.com/p/65629.html