如何将换行符与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

上一篇: How to match newlines with Alex/Haskell

下一篇: Design guidelines for parser and lexer?