问题描述
Exim uses a really awkward comment syntax,
文件中的空白行和以# 字符(忽略前导空格)开头的行被视为注释并被忽略。 注意:除行首以外的 #
字符不被特殊对待,也不引入注释。
这意味着,
# This is is a comment
This has no comments # at all
有没有办法用 pest.rs 反映这一点?我试过了,
COMMENT = { "#" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
WHITESPACE = _{ " " }
main = { SOI ~ ASCII_ALPHA* ~ EOI }
但是,这将匹配
MyText # Exim test this is not a comment
如何将评论锚定在左侧?
解决方法
这对于默认的 object
扩展是不可能的,因为它已扩展为 all instances of rule-concatenation with ~
except for the atomics.。下面两行是一样的,
COMMENT
这实质上意味着如果您要使用 a = { b ~ c }
a = { b ~ WHITESPACE* ~ (COMMENT ~ WHITESPACE*)* ~ c }
和 ~
,您必须将规则限制为 atomic rules with @
and $
取而代之的是,对于基于行的语法,我最终对其进行了改进,而不是使用 COMMENT
宏。而是定义我自己的宏 COMMENT
以避免正常扩展为非原子标记,
_COMMENT
注意这里的 WHITESPACE = _{ " " }
_COMMENT = { "#" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
expr = { ASCII_ALPHA+ }
stmt = { expr ~ NEWLINE }
conf = { SOI ~ (stmt | _COMMENT | NEWLINE)+ ~ EOI }
和 stmt
都以 _COMMENT
终止,并且 conf 包含其中的 1 个或多个。