私はPerlのParse::RecDescentパーサーと一緒に作業しています。私はそれから情報を得るのに最も恐ろしい時が来ているようです。オンラインですぐに入手できる情報は、ほんのわずかな例はないようです。ここでParse :: RecDescent - そこから情報を取得する
はコードです:ここでは
event_function: object_list ':' event_list ';'
<defer:
{ #item is a special character with Parse::Recdescent.
print Dumper($item{object_list});
$return = $item[1];
}
>
| object_list ':' ';'
<defer:
{
print Dumper($item{object_list});
$return = $item[1];
}
>
は、入力ファイルが正しく解析し、出力
PS W:\developers\paulnathan\rd_dir> perl parser.pl testfile
$VAR1 = 4;
$VAR1 = 8;
PS W:\developers\paulnathan\rd_dir>
です。
stuff, stuff2: pre-operation event = {foo1, foo2};
それはは "もの"、 "stuff2" をキーとハッシュを出力する必要があります。
思考?
編集:
object_list :
object ',' object_list
<defer:
{
my $retval =();
$retval = ::merge_hash_refs($item[1], $item[3]);
$return = $retval;
}
>
| object
<defer:
{
#print Dumper($item{object});
$return = $item{object};
}
>
object :
'/' /[a-z0-9_][a-z0-9_]*/ '/' '...'
<defer:
{
$::objects->{$item[2]} = "stuff";
$return = $::objects;
}
>
| /[a-z0-9_][a-z0-9_]*/
<defer:
{
$::objects->{$item[1]} = "stuff";
$return = $::objects;
}
>
EDIT2:念のため Merge_hash_refs、。 :-)
#takes two hash references.
sub merge_hash_refs {
my($ref1, $ref2) = @_;
my $retref =();
while(my ($k, $v) = each %$ref1) {
$retref->{$k} = $v;
}
while(my ($k, $v) = each %$ref2) {
$retref->{$k} = $v;
}
return $retref;
}
object_listルールとevent_listルールの内容を表示できますか? –
Event_listは何も返しません。 object_listが追加されました。 –