我在解析小胡子模板时遇到 Parsec 识别注释的问题。
各种胡须标记都以{{
包含块注释 ( {{!comment}}
) 开头。我已经在我的 TokenParser 中设置了 commentStart 和{{!
commentEnd }}
。
每当我向模板添加评论时,Parsec 都会抱怨评论是意外的。
它需要一个 mustache 变量,因为这是唯一匹配的标记{{
。
Parsec 何时删除评论?我认为它会在源代码命中我的解析器之前发生?
Parsec 不会删除评论。在 aTokenParser
中,注释包含在空格下,因此
whiteSpace tokenParser
跳过注释和普通空格(空格、制表符、换行符……)。
通常,您使用lexeme parser
跳过一个词位之后的所有空白,然后您只需要一个初始空白跳过让顶级解析器跳过源中的任何前导空白,然后,所有空白(包括注释)是自动处理(由创建的TokenParser
)makeTokenParser
。
如果您不lexeme
手动使用和处理空格,则必须注意作为注释分隔符前缀的标记/词素。如果您先尝试前缀,那将成功,但仅消耗部分注释分隔符,在这种情况下,保留'!'
变量解析器,然后失败。