From 180f18e2e61ee0458d160450c9dc579fe0539d19 Mon Sep 17 00:00:00 2001 From: pmichaud Date: Sat, 17 Oct 2009 23:44:01 -0500 Subject: [PATCH] Regexes no longer need explicit action tokens at the end. --- src/Regex/P6Regex/Grammar.pm | 79 +++++++++++++++--------------------- 1 file changed, 33 insertions(+), 46 deletions(-) diff --git a/src/Regex/P6Regex/Grammar.pm b/src/Regex/P6Regex/Grammar.pm index cf270d3..dfc22a1 100644 --- a/src/Regex/P6Regex/Grammar.pm +++ b/src/Regex/P6Regex/Grammar.pm @@ -4,22 +4,20 @@ grammar Regex::P6Regex::Grammar; token normspace { <.ws> } - token quote { \' $=[<-[']>*] \' {*} } + token quote { \' $=[<-[']>*] \' } token arg { [ | | $=[\d+] ] - {*} } - rule arglist { [ ',' ]* {*} } + rule arglist { [ ',' ]* } token TOP { [ $ || <.panic: 'Confused'> ] - {*} } token nibbler { @@ -29,17 +27,14 @@ grammar Regex::P6Regex::Grammar; [ ['||'|'|'] [ || <.panic: 'Null pattern not allowed'> ] ]* - {*} } token termish { + - {*} } token quantified_atom { [ <.ws> [ | ] ]? - {*} } token atom { @@ -48,50 +43,46 @@ grammar Regex::P6Regex::Grammar; | \w [ \w+! ]? | ] - {*} } # proto token quantifier { <...> } - token quantifier:sym<*> { $=['*'] {*} } - token quantifier:sym<+> { $=['+'] {*} } - token quantifier:sym { $=['?'] {*} } + token quantifier:sym<*> { $=['*'] } + token quantifier:sym<+> { $=['+'] } + token quantifier:sym { $=['?'] } token quantifier:sym<**> { $=['**'] \s* \s* [ || $=[\d+] [ '..' $=[\d+|'*'] ]? || ] - {*} } token backmod { ':'? [ '?' | '!' | ] } # proto token metachar { <...> } - token metachar:sym { <.normspace> {*} } - token metachar:sym<[ ]> { '[' ']' {*} } - token metachar:sym<( )> { '(' ')' {*} } - token metachar:sym<'> { {*} } - token metachar:sym<.> { $=['.'] {*} } - token metachar:sym<^> { $=['^'] {*} } - token metachar:sym<^^> { $=['^^'] {*} } - token metachar:sym<$> { $=['$'] {*} } - token metachar:sym<$$> { $=['$$'] {*} } - token metachar:sym<:::> { $=[':::'] {*} } - token metachar:sym<::> { $=['::'] {*} } - token metachar:sym { $=['<<'|'«'] {*} } - token metachar:sym { $=['>>'|'»'] {*} } - token metachar:sym { \\ {*} } - token metachar:sym { {*} } + token metachar:sym { <.normspace> } + token metachar:sym<[ ]> { '[' ']' } + token metachar:sym<( )> { '(' ')' } + token metachar:sym<'> { } + token metachar:sym<.> { $=['.'] } + token metachar:sym<^> { $=['^'] } + token metachar:sym<^^> { $=['^^'] } + token metachar:sym<$> { $=['$'] } + token metachar:sym<$$> { $=['$$'] } + token metachar:sym<:::> { $=[':::'] } + token metachar:sym<::> { $=['::'] } + token metachar:sym { $=['<<'|'«'] } + token metachar:sym { $=['>>'|'»'] } + token metachar:sym { \\ } + token metachar:sym { } token metachar:sym<{*}> { $=['{*}'] [ \h* '#= ' \h* $=[\S+ [\h+ \S+]*] ]? - {*} } token metachar:sym { '<' [ '>' || <.panic: 'regex assertion not terminated by angle bracket'> ] - {*} } token metachar:sym { @@ -101,31 +92,30 @@ grammar Regex::P6Regex::Grammar; ] [ <.ws> '=' <.ws> ]? - {*} } # proto token backslash { <...> } - token backslash:sym { $=[<[dswnDSWN]>] {*} } - token backslash:sym { $=[<[bB]>] {*} } - token backslash:sym { $=[<[eE]>] {*} } - token backslash:sym { $=[<[fF]>] {*} } - token backslash:sym { $=[<[hH]>] {*} } - token backslash:sym { $=[<[rR]>] {*} } - token backslash:sym { $=[<[tT]>] {*} } - token backslash:sym { $=[<[vV]>] {*} } + token backslash:sym { $=[<[dswnDSWN]>] } + token backslash:sym { $=[<[bB]>] } + token backslash:sym { $=[<[eE]>] } + token backslash:sym { $=[<[fF]>] } + token backslash:sym { $=[<[hH]>] } + token backslash:sym { $=[<[rR]>] } + token backslash:sym { $=[<[tT]>] } + token backslash:sym { $=[<[vV]>] } token backslash:sym { 'A' <.obs: '\\A as beginning-of-string matcher;^'> } token backslash:sym { 'z' <.obs: '\\z as end-of-string matcher;$'> } token backslash:sym { 'Z' <.obs: '\\Z as end-of-string matcher;\\n?$'> } token backslash:sym { 'Q' <.obs: '\\Q as quotemeta;quotes or literal variable match'> } - token backslash:sym { \W {*} } + token backslash:sym { \W } # proto token assertion { <...> } - token assertion:sym { '?' [ ' > | ] {*} } - token assertion:sym { '!' [ ' > | ] {*} } + token assertion:sym { '?' [ ' > | ] } + token assertion:sym { '!' [ ' > | ] } token assertion:sym { - '.' {*} + '.' } token assertion:sym { @@ -136,10 +126,9 @@ grammar Regex::P6Regex::Grammar; | ':' | <.normspace> ]? - {*} } - token assertion:sym<[> { + {*} } + token assertion:sym<[> { + } token cclass_elem { $=['+'|'-'|] @@ -153,7 +142,6 @@ grammar Regex::P6Regex::Grammar; | $=[\w+] ] <.normspace>? - {*} } token mod_internal { @@ -161,7 +149,6 @@ grammar Regex::P6Regex::Grammar; | ':' $=('!' | \d+)**1 » | ':' [ '(' $=[\d+] ')' ]? ] - {*} } token mod_ident:sym { $=[i] 'gnorecase'? }