Regexp-Grammars
view release on metacpan or search on metacpan
lib/Regexp/Grammars.pm view on Meta::CPAN
$grammar_spec =~ s{^ ([^#\n]*) \s \# [^\n]* }{$1}gxms;
# Subdivide into rule and token definitions, preparing to process each...
# REWRITE THIS, USING (PROBABLY NEED TO REFACTOR ALL GRAMMARS TO REUSe
# THESE COMPONENTS:
# (?<PARAMLIST> \( \s* (?&PARAMS)? \s* \) | (?# NOTHING ) )
# (?<PARAMS> (?&PARAM) \s* (?: , \s* (?&PARAM) \s* )* ,? )
# (?<PARAM> (?&VAR) (?: \s* = \s* (?: (?&LITERAL) | (?&PARENCODE) ) )? )
# (?<LITERAL> (?&NUMBER) | (?&STRING) | (?&VAR) )
# (?<VAR> : (?&IDENT) )
my @defns = split m{
(< (obj|)(rule|token) \s*+ :
\s*+ ((?:${IDENT}::)*+) (?: ($IDENT) \s*+ = \s*+ )?+
($IDENT)
\s* >)
}xms, $grammar_spec;
# Extract up list of names of defined rules/tokens...
# (Name is every 6th item out of every seven, skipping the first item)
my @subrule_names = @defns[ map { $_ * 7 + 6 } 0 .. ((@defns-1)/7-1) ];
my @defns_copy = @defns[1..$#defns];
( run in 2.109 seconds using v1.01-cache-2.11-cpan-71847e10f99 )