my $parser = new Parse::RecDescent( q{ startrule: script script: 'script' '[' script_options(s /,/) ']' codeblock codeblock: script_options: script_option '=' qstring script_option: 'tag-prefix' | 'language' | 'implements-prefix' is_printable: /[a-zA-Z0-9_&\#;:\$()\'= ,!\@\/.\[\]\-]+/ qstring: '"' is_printable '"' } );