使用Damian Conway的Regexp::Grammars,我尝试匹配不同的平衡引号('foo'、"foo",而不是'foo")机制--比如括号、引号、双引号和双美元。这是我目前使用的代码。
<token: pair> \'<literal>\'|\"<literal>\"|\$\$<literal>\$\$
<token: literal> [\S]+这通常可以很好地工作,并允许我这样说:
<rule: quote> QUOTE <.as>? <pair>我的问题是,我如何改革输出,以排除pair标记的针符号?
{
'' => 'QUOTE AS \',\'',
'quote' => {
'' => 'QUOTE AS \',\'',
'pair' => {
'literal' => ',',
'' => '\',\''
}
}
},在这里,显然不希望在引用和literal值之间有pair。有没有更好的方法来匹配'foo'、"foo"和$$foo$$,有时还可以匹配( foo ),而不是每次都创建不必要的pair令牌?我可以将该令牌预处理出来或将其折叠到上面的令牌中吗?或者,编写一个更好的结构来完全消除对它的需求?
发布于 2010-06-16 06:07:23
根据Damian的说法,答案实际上在文档的部分
The correct answer is to tell your <pair> token
to pass the result of each <literal> subrule through as its own
result, using the MATCH=
alias (see: "Manual result distillation" in the module documentation) like so:
<token: pair> \'<MATCH=literal>\' | \"<MATCH=literal>\" |
\$\$<MATCH=literal>\$\$以下是文档所说的:
Regexp::语法还提供了对蒸馏过程的完全手动控制。如果您使用保留字匹配作为子规则调用的别名...注意,在第二种情况下,即使和被捕获到结果散列,它们也不会被返回,因为匹配别名覆盖了正常的“返回结果散列”语义,并且只返回与其相关联的子规则(即)produces.
发布于 2010-06-16 02:11:31
使用Damian的另一个很棒的模块,Text::Balanced。
https://stackoverflow.com/questions/3047155
复制相似问题