Front page | perl.perl6.language |
Postings from April 2006
[svn:perl6-synopsis] r8906 - doc/trunk/design/syn
From:
larry
Date:
April 21, 2006 19:18
Subject:
[svn:perl6-synopsis] r8906 - doc/trunk/design/syn
Message ID:
20060422021836.24A80CB9BC@x12.develooper.com
Author: larry
Date: Fri Apr 21 19:18:36 2006
New Revision: 8906
Modified:
doc/trunk/design/syn/S02.pod
doc/trunk/design/syn/S04.pod
doc/trunk/design/syn/S05.pod
doc/trunk/design/syn/S06.pod
Log:
Finished rule => regex conversion.
Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod (original)
+++ doc/trunk/design/syn/S02.pod Fri Apr 21 19:18:36 2006
@@ -14,7 +14,7 @@
Date: 10 Aug 2004
Last Modified: 21 Apr 2006
Number: 2
- Version: 27
+ Version: 28
This document summarizes Apocalypse 2, which covers small-scale
lexical items and typological issues. (These Synopses also contain
@@ -338,7 +338,7 @@
Built-in object types start with an uppercase letter. This includes
immutable types (e.g. C<Int>, C<Num>, C<Complex>, C<Rational>, C<Str>,
-C<Bit>, C<Rule>, C<Set>, C<Junction>, C<Code>, B<Block>, C<List>,
+C<Bit>, C<Regex>, C<Set>, C<Junction>, C<Code>, B<Block>, C<List>,
C<Tuple>), as well as mutable (container) types, such as C<Scalar>,
C<Array>, C<Hash>, C<Buf>, C<Routine>, C<Module>, etc.
@@ -1179,7 +1179,7 @@
punctuation anywhere a single adverb is acceptible. When used as named
arguments, you may put comma between. See S06.
-The negated form (C<$!a>) and the sigiled forms (C<:$a>, C<:@a>,
+The negated form (C<:!a>) and the sigiled forms (C<:$a>, C<:@a>,
C<:%a>) never take an argument and don't care what the next character is.
They are considered complete.
@@ -1267,10 +1267,11 @@
macro quote:<qX> (*%adverbs) {...}
-Note: macro adverbs are automatically evaluated at macro call
-time if the adverbs are included in the parse. If the adverbs are
-to affect the parsing of the quoted text of the macro, then the text must
-be parsed by the body of the macro rather than by an C<is parsed> rule.
+Note: macro adverbs are automatically evaluated at macro call time if
+the adverbs are included in the parse. If an adverb needs to affect
+the parsing of the quoted text of the macro, then an explicit named
+parameter may be passed on as a parameter to the C<is parsed> subrule,
+or used to select which subrule to invoke.
=item *
@@ -1457,7 +1458,7 @@
Backslash sequences still interpolate, but there's no longer any C<\v>
to mean I<vertical tab>, whatever that is... (C<\v> now match vertical
-whitespace in a rule.)
+whitespace in a regex.)
=item *
@@ -1822,11 +1823,11 @@
postfix:<++> $x++
circumfix:<[ ]> [ @x ]
postcircumfix:<[ ]> $x[$y] or $x .[$y]
- rule_metachar:<,> /,/
- rule_backslash:<w> /\w/ and /\W/
- rule_assertion:<*> /<*stuff>/
- rule_mod_internal:<perl5> m:/ ... :perl5 ... /
- rule_mod_external:<nth> m:nth(3)/ ... /
+ regex_metachar:<,> /,/
+ regex_backslash:<w> /\w/ and /\W/
+ regex_assertion:<*> /<*stuff>/
+ regex_mod_internal:<perl5> m:/ ... :perl5 ... /
+ regex_mod_external:<nth> m:nth(3)/ ... /
trait_verb:<handles> has $.tail handles <wag>
trait_auxiliary:<shall> my $x shall conform<TR123>
scope_declarator:<has> has $.x;
Modified: doc/trunk/design/syn/S04.pod
==============================================================================
--- doc/trunk/design/syn/S04.pod (original)
+++ doc/trunk/design/syn/S04.pod Fri Apr 21 19:18:36 2006
@@ -12,9 +12,9 @@
Maintainer: Larry Wall <larry@wall.org>
Date: 19 Aug 2004
- Last Modified: 15 Apr 2006
+ Last Modified: 21 Apr 2006
Number: 4
- Version: 15
+ Version: 17
This document summarizes Apocalypse 4, which covers the block and
statement syntax of Perl.
@@ -752,13 +752,13 @@
Hash Array hash value slice truth match if $_{any(@$x)}
Hash any(list) hash key slice existence match if exists $_{any(list)}
Hash all(list) hash key slice existence match if exists $_{all(list)}
- Hash Rule hash key grep match if any($_.keys) ~~ /$x/
+ Hash Regex hash key grep match if any($_.keys) ~~ /$x/
Hash Any hash entry existence match if exists $_{$x}
Hash .{Any} hash element truth* match if $_{Any}
Hash .<string> hash element truth* match if $_<string>
Array Array arrays are identical match if $_ »~~« $x
Array any(list) list intersection match if any(@$_) ~~ any(list)
- Array Rule array grep match if any(@$_) ~~ /$x/
+ Array Regex array grep match if any(@$_) ~~ /$x/
Array Num array contains number match if any($_) == $x
Array Str array contains string match if any($_) eq $x
Array .[number] array element truth* match if $_[number]
@@ -771,7 +771,7 @@
Any Num numeric equality match if $_ == $x
Any Str string equality match if $_ eq $x
Any .method method truth* match if $_.method
- Any Rule pattern match match if $_ ~~ /$x/
+ Any Regex pattern match match if $_ ~~ /$x/
Any subst substitution match* match if $_ ~~ subst
Any boolean simple expression truth* match if true given $_
Any undef undefined match unless defined $_
@@ -846,10 +846,10 @@
C<fail> in such a case to return an exception object. Exception
objects also behave like undefined generators in list context.
In any case, returning an unthrown exception is considered failure
-from the standpoint of C<let>. Backtracking over a closure in a rule
+from the standpoint of C<let>. Backtracking over a closure in a regex
is also considered failure of the closure, which is how hypothetical
-variables are managed by rules. (And on the flip side, use of C<fail>
-within a rule closure initiates backtracking of the rule.)
+variables are managed by regexes. (And on the flip side, use of C<fail>
+within a regex closure initiates backtracking of the regex.)
=head1 When is a closure not a closure
Modified: doc/trunk/design/syn/S05.pod
==============================================================================
--- doc/trunk/design/syn/S05.pod (original)
+++ doc/trunk/design/syn/S05.pod Fri Apr 21 19:18:36 2006
@@ -2,7 +2,7 @@
=head1 TITLE
-Synopsis 5: Rules
+Synopsis 5: Regexes and Rules
=head1 AUTHORS
@@ -16,7 +16,7 @@
Date: 24 Jun 2002
Last Modified: 21 Apr 2006
Number: 5
- Version: 19
+ Version: 20
This document summarizes Apocalypse 5, which is about the new regex
syntax. We now try to call them I<regex> because they haven't been
@@ -726,7 +726,7 @@
a Regex object, it is not recompiled. If it is a string, the compiled
form is cached with the string so that it is not recompiled next
time you use it unless the string changes. (Any external lexical
-variable names must be rebound each time though.) Rules may not be
+variable names must be rebound each time though.) Subrules may not be
interpolated with unbalanced bracketing. An interpolated subrule
keeps its own inner C<$/>, so its parentheses never count toward the
outer regexes groupings. (In other words, parenthesis numbering is always
@@ -1017,7 +1017,7 @@
sub my_grep($selector, *@list) {
given $selector {
- when Rule { ... }
+ when Regex { ... }
when Code { ... }
when Hash { ... }
# etc.
@@ -1025,7 +1025,7 @@
}
Using C<{...}> or C</.../> in the scalar context of the first argument
-causes it to produce a C<Code> or C<Rule> object, which the switch
+causes it to produce a C<Code> or C<Regex> object, which the switch
statement then selects upon.
=item *
Modified: doc/trunk/design/syn/S06.pod
==============================================================================
--- doc/trunk/design/syn/S06.pod (original)
+++ doc/trunk/design/syn/S06.pod Fri Apr 21 19:18:36 2006
@@ -15,7 +15,7 @@
Date: 21 Mar 2003
Last Modified: 21 Apr 2006
Number: 6
- Version: 28
+ Version: 29
This document summarizes Apocalypse 6, which covers subroutines and the
@@ -34,12 +34,17 @@
subroutines masquerading as methods. They have an invocant and belong to
a particular kind or class.
-B<Rules> (keyword: C<rule>) are methods (of a grammar) that perform
+B<Regexes> (keyword: C<regex>) are methods (of a grammar) that perform
pattern matching. Their associated block has a special syntax (see
-Synopsis 5).
+Synopsis 5). (We also use the term "regex" for anonymous patterns
+of the traditional form.)
-B<Tokens> (keyword: C<token>) are rules that perform low-level
-pattern matching (and also enable rules to do whitespace dwimmery).
+B<Tokens> (keyword: C<token>) are regexes that perform low-level
+non-backtracking (by default) pattern matching.
+
+B<Rules> (keyword: C<rule>) are regexes that perform non-backtracking
+(by default) pattern matching (and also enable rules to do whitespace
+dwimmery).
B<Macros> (keyword: C<macro>) are routines whose calls execute as soon
as they are parsed (i.e. at compile-time). Macros may return another
@@ -297,13 +302,13 @@
within a C<< <...> >> or C<«...»> slice, as in the example above).
A null operator name does not define a null or whitespace operator, but
-a default matching rule for that syntactic category, which is useful when
+a default matching subrule for that syntactic category, which is useful when
there is no fixed string that can be recognized, such as tokens beginning
with digits. Such an operator I<must> supply an C<is parsed> trait.
-The Perl grammar uses a default rule for the C<:1st>, C<:2nd>, C<:3rd>,
-etc. rule modifiers, something like this:
+The Perl grammar uses a default subrule for the C<:1st>, C<:2nd>, C<:3rd>,
+etc. regex modifiers, something like this:
- sub rule_mod_external:<> ($x) is parsed(rx:p/\d+[st|nd|rd|th]/) {...}
+ sub regex_mod_external:<> ($x) is parsed(token { \d+[st|nd|rd|th] }) {...}
Such default rules are attempted in the order declared. (They always follow
any rules with a known prefix, by the longest-token-first rule.)
@@ -1181,7 +1186,7 @@
my Dog $ ($fido, $spot) := twodogs(); # one twodog object
my Dog :($fido, $spot) := twodogs(); # one twodog object
-Subsignatures can be matched directly with rules by using C<:(...)>
+Subsignatures can be matched directly within regexes by using C<:(...)>
notation.
push @a, "foo";
@@ -1202,7 +1207,7 @@
within the signature. Otherwise it will try to bind an external C<$i>
instead, and fail if no such variable is declared.
-Note that unlike a sub declaration, a rule-embedded signature has no
+Note that unlike a sub declaration, a regex-embedded signature has no
associated "returns" syntactic slot, so you have to use C<< --> >>
within the signature to specify the type of the tuple, or match as
an arglist:
@@ -1234,7 +1239,7 @@
and match a tuple-ish item with a single value of type Dog.
-Note also that bare C<\(1,2,3)> is never legal in a rule since the
+Note also that bare C<\(1,2,3)> is never legal in a regex since the
first paren would try to match literally.
=head2 Attributive parameters
@@ -1348,7 +1353,7 @@
Method Perl method
Submethod Perl subroutine acting like a method
Macro Perl compile-time subroutine
- Rule Perl pattern
+ Regex Perl pattern
Match Perl match, usually produced by applying a pattern
Package Perl 5 compatible namespace
Module Perl 6 standard namespace
@@ -1603,7 +1608,9 @@
=item C<is parsed>
-Specifies the rule by which a macro call is parsed.
+Specifies the subrule by which a macro call is parsed. The parse
+always starts after the macro token, but the token may be referred
+to within the subrule as C<< $<KEY> >>.
=item C<is cached>
@@ -1795,9 +1802,11 @@
=head2 The C<leave> function
-A C<return> statement causes the innermost surrounding subroutine, method,
-rule, macro, or multimethod to return. Only declarations with an explicit
-keyword such as "sub" may be returned from.
+A C<return> statement causes the innermost surrounding subroutine,
+method, rule, token, regex (as a keyword), macro, or multimethod
+to return. Only declarations with an explicit keyword such as "sub"
+may be returned from. You may not return from a quotelike operator such
+as C<rx//>.
To return from other types of code structures, the C<leave> function is used:
@@ -1807,6 +1816,13 @@
leave &foo <== 1,2,3; # Return from innermost surrounding call to &foo
leave Loop, :label<COUNT>; # Same as: last COUNT;
+Note that the last is equivalent to
+
+ last COUNT;
+
+and, in fact, you can return a final loop value that way:
+
+ last COUNT <== 42;
=head2 Temporization
@@ -2106,7 +2122,7 @@
delimiters in a row should not be a problem. It has to be a special
grammar rule, though, not a fixed token, since we need to be able to
nest code blocks with different delimiters. Likewise when parsing the
-inner expression, the inner parser rule is parameterized to know that
+inner expression, the inner parser subrule is parameterized to know that
C<}}}> or whatever is its closing delimiter.)
Unquoted expressions are inserted appropriately depending on the
-
[svn:perl6-synopsis] r8906 - doc/trunk/design/syn
by larry