gpt4 book ai didi

haskell - 在 Parsec 中,有没有办法防止词素消耗换行符?

转载 作者:行者123 更新时间:2023-12-03 23:48:24 26 4
gpt4 key购买 nike

Text.Parsec.Token 中的所有解析器礼貌使用 lexeme在 token 后吃空格。对我来说不幸的是,空格包含新行,我想将其用作表达式终止符。有没有办法说服lexeme离开一个新行?

最佳答案

不它不是。这是相关的代码。

来自 Text.Parsec.Token :

lexeme p
= do{ x <- p; whiteSpace; return x }


--whiteSpace
whiteSpace
| noLine && noMulti = skipMany (simpleSpace <?> "")
| noLine = skipMany (simpleSpace <|> multiLineComment <?> "")
| noMulti = skipMany (simpleSpace <|> oneLineComment <?> "")
| otherwise = skipMany (simpleSpace <|> oneLineComment <|> multiLineComment <?> "")
where
noLine = null (commentLine languageDef)
noMulti = null (commentStart languageDef)

我们会在 whitespace 的 where 子句中注意到唯一的选项看着处理评论。 lexeme函数使用 whitespace它在 parsec.token 的其余部分中被大量使用.

2015 年 9 月 28 日更新

我的最终解决方案是使用适当的词法分析器( alex)。 Parsec 作为一个解析库做得非常好,它的设计值得称赞,它可以进行词法分析,但是对于除了小而简单的项目之外的所有项目,它很快就会变得笨拙。我现在使用 alex 创建一组线性标记,然后 Parsec 将它们转换为 AST。

关于haskell - 在 Parsec 中,有没有办法防止词素消耗换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com