#----------------------------------------------------------------- # Rules for use #----------------------------------------------------------------- use: /\buse\s/ use_stuff ';' { $return=$item{use_stuff} } use_stuff: (base | pragma | version | module) base: "base" import_list pragma: /[a-z]+/ import_list { $return=$item[1]} module: module_name module_more { $return=$item{module_name} } module_name: /[\w:]+/ module_more: eos | version(?) var(?) import_list(?) #----------------------------------------------------------------- # Rules for require #----------------------------------------------------------------- require: /\brequire\s/ require_stuff ';' { $return=$item{require_stuff} } require_stuff: (version | require_name | module) require_name: { my $name=$item[1][2]; return 1 if ($name=~/\.pl$/); $name=~s(/)(::)g; $name=~s/\.pm//; $return=$name; } #----------------------------------------------------------------- # General Rules #----------------------------------------------------------------- version: /[\d\._v]+/ eos: { $text=~/^[\s;]+$/ ? 1 : undef;} var: /\$[\w+]/ import_list: /[(]?/ list_item comma_list_item(s?) /[)]?/ { $return=$item[2]; $return.=" ".join(" ",@{$item[3]}) if $item[3]; } list_item: { $return=$item[1][2] } | /\w+/ { $return=$item[1] } comma_list_item: comma list_item { $return=$item{list_item} } comma: (',' | '=>')