我正在尝试使用以下语法解析BibTeX作者字段:
use v6;
use Grammar::Tracer;
# Extract BibTeX author parts from string. The parts are separated
# by a comma and optional space around the comma
grammar Author {
token TOP {
<all-text>
}
token all-text {
[<author-part> [[\s* ',' \s*] || [\s* $]]]+
}
token author-part {
[<-[\s,]> || [\s* <!before ','>]]+
}
}
my $str = "Rockhold, Mark L";
my $result = Author.parse( $str );
say $result;
输出:
TOP
| all-text
| | author-part
| | * MATCH "Rockhold"
| | author-part
但是程序挂起(我必须按CTRL-C)才能中止。
我怀疑这个问题与负前瞻断言有关。我试图将其删除,然后程序不再挂起,但是我也无法使用内部空间提取最后一部分"Mark L"
。
请注意,出于调试目的,上面的Author
语法是我实际程序中使用的语法的简化版本。