Parsec无法识别块注释

时间:2013-01-08 14:32:45

标签: haskell mustache parsec

在解析胡子模板时,Parsec识别注释时遇到问题 所有以{{开头的胡须标记都包含块注释({{!comment}})。 我已在我的TokenParser中将commentStart和commentEnd设置为{{!}}
每当我向模板添加评论时,Parsec都会抱怨评论是意料之外的 它需要一个胡子变量,因为这是唯一匹配{{的标记。

Parsec什么时候删除评论?我认为它会在源命中我的解析器之前发生吗?

1 个答案:

答案 0 :(得分:7)

Parsec不会删除评论。在TokenParser中,注释包含在空格下,所以

whiteSpace tokenParser

跳过评论和普通空格(空格,制表符,换行符......)。

通常,您使用lexeme parser跳过词法后面的所有空格,然后您只需要一个初始的空白空间跳过,以便顶级解析器跳过源中的任何前导空格,之后,所有空格(包括评论)都会自动处理(TokenParser创建的makeTokenParser

如果您不使用lexeme并手动处理空格,则必须注意作为注释分隔符前缀的标记/词位。如果你首先尝试前缀,那将成功,但只消耗部分注释分隔符,在这种情况下,将'!'留给变量解析器,然后失败。