#-----------------------------------------------------------------
# Rules for use
#-----------------------------------------------------------------
token_use: /\buse\s/ use_stuff /[;}]/
{ $return=$item{use_stuff} }
use_stuff: (base | parent | version | module)
base: "base" import_list
parent: "parent" import_list
{ $return='parent'; $return.=' '.$item[2] if $item[2] !~ /^\s*-norequire\b/; }
module: module_name module_more
{ $return=$item{module_name} }
module_name: /[\w:]+/
module_more: eos | version(?) var(?) import_list(?)
#-----------------------------------------------------------------
# Rules for require
#-----------------------------------------------------------------
token_require: /\brequire\s/ require_stuff /[;}]/
{ $return=$item{require_stuff} }
require_stuff: (version | require_name | module)
require_name: <perl_quotelike>
{ my $name=$item[1][2];
return 1 if ($name=~/\.pl$/);
$name=~s(/)(::)g;
$name=~s/\.pm//;
$return=$name;
}
#-----------------------------------------------------------------
# General Rules
#-----------------------------------------------------------------
version: /v?[\d\._]+/
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];
}
|
/[(]\s*[)]/ { $return='' }
list_item: <perl_quotelike> { $return=$item[1][2] }
|
<perl_codeblock (){}[]> { $return=$item[1] }
|
/-?\w+/ { $return=$item[1] }
comma_list_item: comma list_item
{ $return=$item{list_item} }
comma: (',' | '=>')