Skip to content
This repository has been archived by the owner on Feb 3, 2021. It is now read-only.

Commit

Permalink
Add the ability to parse arglists after colons in subrule calls.
Browse files Browse the repository at this point in the history
Add parsing of {*} tokens.
Bootstrap progress: The "p6grammar" executable is now able to
parse its own grammar definition; test via
    ./p6grammar --target=parse src/Regex/P6Grammar/Grammar.pm
  • Loading branch information
pmichaud committed Oct 15, 2009
1 parent f80ba14 commit e7e5924
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/Regex/P6Grammar/Grammar.pm
Expand Up @@ -3,20 +3,25 @@ grammar Regex::P6Grammar::Grammar is Regex::P6Regex::Grammar;
token TOP {
<grammar_stmt>
<regex_stmt>*
$
[ $ || <.panic: 'Confused'> ]
{*}
}

token name { <.ident> ** [\:\:] }
token name { <.ident> ** [\:\:] {*} }

token arg {
token longname {
[
| <.ident> [ \: sym \< <-[>]>*: \> ]?
]
{*}
}

rule grammar_stmt { grammar <name> [ is <base=name> ]? \; }
rule grammar_stmt { grammar <name> [ is <base=name> ]? \; {*} }

rule regex_stmt {
$<sym>=[regex|token|rule]
<name=arg>
<longname>
\{ <nibbler> \}
{*}
}

14 changes: 14 additions & 0 deletions src/Regex/P6Regex/Grammar.pm
Expand Up @@ -4,6 +4,18 @@ grammar Regex::P6Regex::Grammar is PCT::Grammar;

token normspace { <?before \s | '#' > <.ws> }

token quote { \' $<val>=[<-[']>*] \' {*} }

token arg {
[
| <quote>
| $<value>=[\d+]
]
{*}
}

rule arglist { <arg> ** \, {*} }

token TOP {
<nibbler>
[ $ || <.panic: "Syntax error"> ]
Expand Down Expand Up @@ -67,6 +79,7 @@ grammar Regex::P6Regex::Grammar is PCT::Grammar;
token metachar:sym<::> { $<sym>=['::'] {*} }
token metachar:sym<lwb> { $<sym>=['<<'|'«'] {*} }
token metachar:sym<rwb> { $<sym>=['>>'|'»'] {*} }
token metachar:sym<{*}> { $<sym>=['{*}'] {*} }
token metachar:sym<bs> { \\ <backslash> {*} }
token metachar:sym<mod> { <mod_internal> {*} }
token metachar:sym<assert> {
Expand Down Expand Up @@ -115,6 +128,7 @@ grammar Regex::P6Regex::Grammar is PCT::Grammar;
| <?before '>'>
| <.normspace> <nibbler>
| '=' <assertion>
| ':' <arglist>
]?
{*}
}
Expand Down

0 comments on commit e7e5924

Please sign in to comment.