相关疑难解决方法(0)

使用Parsec解析正则表达式

我正在尝试通过实现一个小的正则表达式解析器来学习Parsec.在BNF中,我的语法看起来像:

EXP  : EXP *
     | LIT EXP
     | LIT
Run Code Online (Sandbox Code Playgroud)

我试图在Haskell中实现这个:

expr = try star
       <|> try litE
       <|> lit

litE  = do c <- noneOf "*"
           rest <- expr
           return (c : rest)

lit   = do c <- noneOf "*"
           return [c]

star = do content <- expr
          char '*'
          return (content ++ "*")
Run Code Online (Sandbox Code Playgroud)

这里有一些无限循环(例如expr - > star - > expr,不消耗任何标记),这使得解析器永远循环.我不确定如何修复它,因为它的本质star是它最终会消耗它的强制令牌.

有什么想法吗?

grammar parsing haskell parsec context-free-grammar

8
推荐指数
2
解决办法
1950
查看次数

标签 统计

context-free-grammar ×1

grammar ×1

haskell ×1

parsec ×1

parsing ×1