如果我的语法中有这样的内容:
grammar G {
token tab-indent(Int $level) {
# Using just ** $level would require <!before \t> to have the same effect, so use a code block for simplicity.
\t+ <?{ $/.chars == $level }>
}
}
有没有办法直接获取值$level
在相应的动作中method tab-indent($/)
?
现在我重做$/.chars
也有,它有效,但似乎并不理想,特别是在更复杂的情况下,其中参数的值不太容易从匹配文本中推断出来。
有谁知道更好的方法来做到这一点?提前致谢!
您可以使用动态变量将信息传递给操作类的方法。
grammar G {
token TOP {
<tab-indent(2)> $<rest> = .*
}
token tab-indent(Int $level) {
:my $*level = $level; # has to be in this scope, not in a block
\t ** {$level}
}
}
class A {
method tab-indent($/) {
say '$*level = ', $*level;
}
}
say G.parse( actions => A.new, "\t\t\t" );
$*level = 2
「 」
tab-indent => 「 」
rest => 「 」
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)