【发布时间】:2017-10-23 20:24:18
【问题描述】:
我想让grammar 做这样的事情:
> "abc" ~~ m:ex/^ (\w ** 1..2) (\w ** 1..2) $ {say $0, $1}/
「ab」「c」
「a」「bc」
或者像这样:
> my regex left { \S ** 1..2 }
> my regex right { \S ** 1..2 }
> "abc" ~~ m:ex/^ <left><right> $ {say $<left>, $<right>}/
「ab」「c」
「a」「bc」
这是我的grammar:
grammar LR {
regex TOP {
<left>
<right>
}
regex left {
\w ** 1..2
}
regex right {
\w ** 1..2
}
}
my $string = "abc";
my $match = LR.parse($string);
say "input: $string";
printf "split: %s|%s\n", ~$match<left>, ~$match<right>;
它的输出是:
$ input: abc
$ split: ab|c
所以,<left> 只能是贪婪,没有给<right>。我应该如何修改代码以匹配两种可能的变体?
$ input: abc
$ split: a|bc, ab|c
【问题讨论】:
标签: raku