Parsing 解析一系列lambda演算项

Parsing 解析一系列lambda演算项,parsing,haskell,lambda-calculus,Parsing,Haskell,Lambda Calculus,我正在用Haskell编写一个lambda演算解析器,但找不到解决当前问题的方法 如何解析表达式: expr :: Parser LamExpr expr = do terms <- some $ token term return $ foldl1 LamApp terms 解析应该失败,因为它在语法上不正确,但它仍然解析第一个应用程序。我想这是因为do-terms我假设您使用的是一些parsec变体。您只需在解析器的末尾添加一个eof parseInput = d

我正在用Haskell编写一个lambda演算解析器,但找不到解决当前问题的方法

如何解析表达式:

expr :: Parser LamExpr
expr = do terms <- some $ token term
          return $ foldl1 LamApp terms

解析应该失败,因为它在语法上不正确,但它仍然解析第一个应用程序。我想这是因为
do-terms我假设您使用的是一些parsec变体。您只需在解析器的末尾添加一个
eof

parseInput = do
    e <- expr
    eof
    pure e  -- (*)


(*)顺便说一句,现在社区开始使用
pure
而不是
return
,这实际上是一项任务,因此我们得到了一个解析函数库来构建它。所以我没有访问
eof
,它会解析字符串的结尾吗?@ictoun,是的。也许您可以创建一个解析器组合器,它基于您的库执行相同的操作——只有当(剩余的)输入为空时,它才会成功。
LamApp (LamVar 1) (LamVar 2)
parseInput = do
    e <- expr
    eof
    pure e  -- (*)
parseInput = expr <* eof