Parsing 解析一系列lambda演算项
我正在用Haskell编写一个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
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