Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - Perlito5::Grammar::Regex5 more details
  • Loading branch information
fglock committed Apr 18, 2014
1 parent 3eecee9 commit b9c2191
Showing 1 changed file with 39 additions and 19 deletions.
58 changes: 39 additions & 19 deletions src5/lib/Perlito5/Grammar/Regex5.pm
Expand Up @@ -13,33 +13,53 @@ token string_of_code {
]+
};

token verb {
'PRUNE' | 'SKIP' | 'MARK' | 'THEN' | 'COMMIT' | 'FAIL' | 'F' | 'ACCEPT'
};

token rule_term {
| '^' { $MATCH->{capture} = 'beginning_of_line' }
| '$' { $MATCH->{capture} = 'end_of_line' }
| '.' { $MATCH->{capture} = Perlito5::Rul::Dot->new() }

| '(?'
[ ':' <rule> ')'
{ $MATCH->{capture} = Perlito5::Match::flat($MATCH->{rule}) }
| '=' <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::Before->new( rule_exp => Perlito5::Match::flat($MATCH->{rule}) ) }
| '!' <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::NotBefore->new( rule_exp => Perlito5::Match::flat($MATCH->{rule}) ) }
| '>' <rule> ')'
{ $MATCH->{capture} = { 'possessive_quantifier' => Perlito5::Match::flat($MATCH->{rule}) } }
| '<' <Perlito5::Grammar.ident> '>' <rule> ')'
{ $MATCH->{capture} = { 'named_capture' => { name => Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.ident'}),
term => Perlito5::Match::flat($MATCH->{rule}) } }
| '('
[ '?'
[ ':' <rule> ')'
{ $MATCH->{capture} = Perlito5::Match::flat($MATCH->{rule}) }
| '=' <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::Before->new( rule_exp => Perlito5::Match::flat($MATCH->{rule}) ) }
| '!' <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::NotBefore->new( rule_exp => Perlito5::Match::flat($MATCH->{rule}) ) }
| '>' <rule> ')'
{ $MATCH->{capture} = { 'possessive_quantifier' => Perlito5::Match::flat($MATCH->{rule}) } }
| '<' <Perlito5::Grammar.ident> '>' <rule> ')'
{ $MATCH->{capture} = { 'named_capture' => { name => Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.ident'}),
term => Perlito5::Match::flat($MATCH->{rule}) } }
}
| '{' <string_of_code> '})'
{ $MATCH->{capture} = Perlito5::Rul::Block->new( closure => Perlito5::Match::flat($MATCH->{string_of_code}) ) }
| '#' [ <!before ')' > . ]* ')'
{ $MATCH->{capture} = 'comment' }
]
| '*'
[ ':' <Perlito5::Grammar.ident> ')'
{ $MATCH->{capture} = { verb => 'MARK',
name => Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.ident'}) }
}
| <verb>
[ ':' <Perlito5::Grammar.ident> ')'
{ $MATCH->{capture} = { verb => Perlito5::Match::flat($MATCH->{'verb'}),
name => Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.ident'}), }
}
| { $MATCH->{capture} = { verb => Perlito5::Match::flat($MATCH->{'verb'}) } }
]
]
| <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::Subrule->new(
metasyntax => Perlito5::Match::flat($MATCH->{rule}), captures => 1 )
}
| '{' <string_of_code> '})'
{ $MATCH->{capture} = Perlito5::Rul::Block->new( closure => Perlito5::Match::flat($MATCH->{string_of_code}) ) }
| '#' [ <!before ')' > . ]* ')'
{ $MATCH->{capture} = 'comment' }
]

| '(' <rule> ')'
{ $MATCH->{capture} = Perlito5::Rul::Subrule->new( metasyntax => Perlito5::Match::flat($MATCH->{rule}), captures => 1 ) }

| \\
[
| 'c' \[ <Perlito5::Grammar::Number.digits> \]
Expand Down

0 comments on commit b9c2191

Please sign in to comment.