【发布时间】:2015-10-10 18:01:51
【问题描述】:
我目前正在开发一个用 Haskell 编写的词法分析器,几乎完成了,但遇到了一个特殊情况标记的问题。目前,我的词法分析器采用输入字符串并将语句分解为数字、变量名和特定标记(例如“if”、“else”和“then”)的标记。
它适用于我所有的令牌,除了一个“000 ...”。
我被教导使用 span 函数,所以我让我的词法分析器使用 isDigit 和 isAlphaNum 布尔函数来解析输入。但是,因为“000...”以零开头,所以它会自动以数字形式返回。此外,句点也是语法中的一个标记,因此在我的词法分析器中输入“000...”的结果当前会导致“0”“。” “。” “。”。
我不精通 Haskell 语言,但是否可以使用 isPrint 匹配字符串,以及处理字符串和整数实例的用例?我现在不知所措,似乎我尝试过的一切都破坏了我的程序。我当前的模式匹配部分如下所示:
lexer (c:cs)
| isSpace c = lexer cs
| isDigit c = lexDigit (c:cs)
| isAlphaNum c = lexString (c:cs)
| True = InvalidToken c : lexer cs
lexString
| s1 == "if" = IfToken : lexer s2
| s1 == "else" = ElseToken : lexer s2
| s1 == "then" = ThenToken : lexer s2
| s1 == "000..." = Zero : lexer s2
| True = StringToken s1 : lexer s2
where (s1,s2) = (span isAlphaNum cs)
感谢任何帮助!
【问题讨论】:
标签: html haskell design-patterns token matching