Author: lwall
Date: 2009-01-27 01:08:23 +0100 (Tue, 27 Jan 2009)
New Revision: 25048
Modified:
docs/Perl6/Spec/S05-regex.pod
src/perl6/STD.pm
Log:
[STD, S05] converge spec and parse of character classes
Modified: docs/Perl6/Spec/S05-regex.pod
===================================================================
--- docs/Perl6/Spec/S05-regex.pod 2009-01-26 22:33:20 UTC (rev 25047)
+++ docs/Perl6/Spec/S05-regex.pod 2009-01-27 00:08:23 UTC (rev 25048)
@@ -14,9 +14,9 @@
Maintainer: Patrick Michaud <[email protected]> and
Larry Wall <[email protected]>
Date: 24 Jun 2002
- Last Modified: 17 Nov 2008
+ Last Modified: 26 Jan 2009
Number: 5
- Version: 86
+ Version: 87
This document summarizes Apocalypse 5, which is about the new regex
syntax. We now try to call them I<regex> rather than "regular
@@ -1399,7 +1399,8 @@
<alpha>
However, in order to combine classes you must prefix a named
-character class with C<+> or C<->.
+character class with C<+> or C<->. Whitespace is required before
+any C<-> that would be misparsed as an identifier extender.
=item *
Modified: src/perl6/STD.pm
===================================================================
--- src/perl6/STD.pm 2009-01-26 22:33:20 UTC (rev 25047)
+++ src/perl6/STD.pm 2009-01-27 00:08:23 UTC (rev 25048)
@@ -3758,7 +3758,7 @@
|| [ <?before \s | '#'> <nextsame> ]? # still get all the pod
goodness, hopefully
}
- token sigspace {
+ token normspace {
<?before \s | '#'> [ :lang($¢.cursor_fresh($+LANG)) <.ws> ]
}
@@ -3832,7 +3832,7 @@
# "normal" metachars
token metachar:sigwhite {
- <sigspace>
+ <normspace>
}
token metachar:sym<{ }> {
@@ -3988,23 +3988,25 @@
]?
}
- token assertion:sym<[> { <before '[' > <cclass_elem> ** < + - > }
- token assertion:sym<+> { <sym> <cclass_elem> ** < + - > }
- token assertion:sym<-> { <sym> <cclass_elem> ** < + - > }
+ token assertion:sym<[> { <?before '['> <cclass_elem>+ }
+ token assertion:sym<+> { <?before '+'> <cclass_elem>+ }
+ token assertion:sym<-> { <?before '-'> <cclass_elem>+ }
token assertion:sym<.> { <sym> }
token assertion:sym<,> { <sym> }
token assertion:sym<~~> { <sym> [ <?before '>'> | \d+ | <desigilname> ] }
token assertion:bogus { <.panic: "Unrecognized regex assertion"> }
+ token sign { '+' | '-' | <?> }
token cclass_elem {
- <.ws>
:dba('character class element')
+ <sign>
+ <.normspace>?
[
| <name>
| <before '['> <quibble($¢.cursor_fresh( ::STD::Q ).tweak(:q))> # XXX
parse as q[] for now
]
- <.ws>
+ <.normspace>?
}
token mod_arg { :dba('modifier argument') '(' ~ ')' <semilist> }
@@ -4044,7 +4046,7 @@
token quantifier:sym<*> { <sym> <quantmod> }
token quantifier:sym<+> { <sym> <quantmod> }
token quantifier:sym<?> { <sym> <quantmod> }
- token quantifier:sym<**> { <sym> :: <sigspace>? <quantmod> <sigspace>?
+ token quantifier:sym<**> { <sym> :: <normspace>? <quantmod> <normspace>?
[
| \d+ [ '..' [ \d+ | '*' ] ]?
| <codeblock>
@@ -4057,7 +4059,7 @@
| '!' <sym>
| <sym>
]
- <sigspace> <quantified_atom> }
+ <normspace> <quantified_atom> }
token quantmod { ':'? [ '?' | '!' | '+' ]? }