my $parser = new Parse::RecDescent (q[ functiondefine: /function/i name "(" parameters[$item[1]](?) ")" "{" name: /[A-Za-z][a-zA-Z0-9_]*/ parameters: parameter[$arg[0]] ',' parameters[$arg[0]] { [@item[1,3]] } | parameter[$arg[0]] { [$item[1]] } parameter: name /as/i variabletype { [@item[1..$#item]] } variabletype: /variant|array|keyarray/i ]);