小编Ben*_*ugh的帖子

为什么在使用Parsec的buildExpressionParser时只有第一个定义的中缀运算符解析?

我正在尝试使用Parsec为命题演算编写解析器.解析器使用Text.Parsec.Expr中buildExpressionParser函数.这是我定义逻辑运算符的代码.

operators = [ [Prefix (string "~" >> return Negation)]
            , [binary "&" Conjunction]
            , [binary "|" Disjunction]
            , [binary "->" Conditional]
            , [binary "<->" Biconditional]
            ]

binary n c = Infix (spaces >> string n >> spaces >> return c) AssocRight

expr = buildExpressionParser operators term
    <?> "compound expression"
Run Code Online (Sandbox Code Playgroud)

我省略了变量,术语和括号表达式的解析器,但如果您认为它们可能与问题相关,则可以阅读解析器完整源代码.

解析器成功使用仅使用否定和连接的表达式,即唯一的前缀运算符和第一个中缀运算符.

*Data.Logic.Propositional.Parser2> runPT expr () "" "p & ~q"
Right (p ? ¬q)
Run Code Online (Sandbox Code Playgroud)

使用任何其他运算符的表达式在运算符的第一个字符上失败,出现如下错误:

*Data.Logic.Propositional.Parser2> runPT expr () "" "p | …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

6
推荐指数
1
解决办法
933
查看次数

标签 统计

haskell ×1

parsec ×1