私はBibTeX著者フィールドを解析し、それを別々の著者に分割しようとしています。これは、各著者のイニシャルを書き直すのに役立ちます。ここでは、最小限の例です:文法で以前に一致した項目を参照する方法は?
use v6;
my $str = '{Rockhold, Mark L and Yarwood, RR and Selker, John S}';
grammar BibTexAuthor {
token TOP {
<all-text>
}
token all-text {
'{' <authors> '}'
}
token authors {
[<author> [' and ' || <?before '}'>]]+
}
token author {
[<-[\s}]> || [' ' <!before 'and '>]]+
}
}
class BibTexAuthor-actions {
method TOP($/) {
say $/;
print "First author = ";
say $<author>.made[0];
make $/.Str;
}
method all-text($/) {
make $/.Str;
}
method authors($/) {
make $/.Str;
}
method author($/) {
make $/.Str;
}
}
my $res = BibTexAuthor.parse($str, actions => BibTexAuthor-actions.new).made;
出力:
「{Rockhold, Mark L and Yarwood, RR and Selker, John S}」
all-text => 「{Rockhold, Mark L and Yarwood, RR and Selker, John S}」
authors => 「Rockhold, Mark L and Yarwood, RR and Selker, John S」
author => 「Rockhold, Mark L」
author => 「Yarwood, RR」
author => 「Selker, John S」
First author = Nil
なぜTOP
方法で最初の著者を抽出することができないのですか?
'メソッドの作者($ /)を取得するために言うことができる{(*。製) .MAP @作る}' –
@BradGilbertのおかげで提案のために、私はその仕事をすることはできません。私の 'method authors 'をあなたの提案に置き換えた場合、私は最初の著者のために' Nil'という出力を得ます。 –
$ [0]; –
Holli