您如何处理空格和评论?在语法分析阶段通常删除的片段?我想在我正在解析的文档中的任何地方启用注释。是否在我定义的唯一基本解析器中添加了这些选项?
最佳答案
在Text.Parsec.Token
中完成的方式是让每个 token 都使用空格和其后的注释。
这是通过lexeme
组合器的帮助完成的:
lexeme p = do { x <- p; whitespace; return x }
运行解析器
p
,使用它后面的空白并返回返回的任何p
。当您查看
makeTokenParser
(link)的来源时,您会看到许多 token 解析器是使用lexeme
组合器包装的,例如:symbol name
= lexeme (string name)
使用此方法,
lexeme
(link)的注释指出,解析器唯一需要显式消耗空白的时间是在输入的开头,以跳过第一个 token 之前的任何空白。关于haskell - parsec:有没有一种简单的方法可以在语法中的任何地方允许注释/空白?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31702663/