Benchmark-Perl-Formance-Cargo
view release on metacpan or search on metacpan
share/P6STD/STD_P5.pm6 view on Meta::CPAN
token name {
[
| <identifier> <morename>*
| <morename>+
]
}
token morename {
:my $*QSIGIL ::= '';
'::'
[
<?before '(' | <alpha> >
[
| <identifier>
| :dba('indirect name') '(' ~ ')' <EXPR>
]
]?
}
token subshortname {
[
| <category>
[ <colonpair>+ { $¢.add_macro($<category>) if $*IN_DECL; } ]?
| <desigilname>
]
}
token sublongname {
<subshortname> <sigterm>?
}
token p5value:quote { <quote=p5quote> }
token p5value:number { <number=p5number> }
token p5value:version { <version=p5version> }
# Note: call this only to use existing type, not to declare type
token typename {
[
| '::?'<identifier> # parse ::?CLASS as special case
| <longname>
<?{{
my $longname = $<longname>.Str;
if substr($longname, 0, 2) eq '::' {
$¢.add_my_name(substr($longname, 2));
}
else {
$¢.is_name($longname)
}
}}>
]
# parametric type?
<.unsp>? [ <?before '['> <postcircumfix=p5postcircumfix> ]?
<.ws> [ 'of' <.ws> <typename> ]?
}
token numish {
[
| <integer>
| <dec_number>
| <rad_number>
| 'NaN' »
| 'Inf' »
| '+Inf' »
| '-Inf' »
]
}
token number:numish { <numish> }
token integer {
[
| 0 [ b <[01]>+ [ _ <[01]>+ ]*
| o <[0..7]>+ [ _ <[0..7]>+ ]*
| x <[0..9a..fA..F]>+ [ _ <[0..9a..fA..F]>+ ]*
| d \d+ [ _ \d+]*
| \d+[_\d+]*
<!!{ $¢.worry("Leading 0 does not indicate octal in Perl 6") }>
]
| \d+[_\d+]*
]
}
token radint {
[
| <integer>
| <?before ':'> <rad_number> <?{
defined $<rad_number><intpart>
and
not defined $<rad_number><fracpart>
}>
]
}
token escale {
<[Ee]> <[+\-]>? \d+[_\d+]*
}
# careful to distinguish from both integer and 42.method
token dec_number {
:dba('decimal number')
[
| $<coeff> = [ '.' \d+[_\d+]* ] <escale>?
| $<coeff> = [\d+[_\d+]* '.' \d+[_\d+]* ] <escale>?
| $<coeff> = [\d+[_\d+]* ] <escale>
]
<!!before [ '.' <?before \d> <.panic: "Number contains two decimal points (missing 'v' for version number?)">]? >
}
token octints { [<.ws><octint><.ws>] +% ',' }
token octint {
<[ 0..7 ]>+ [ _ <[ 0..7 ]>+ ]*
}
token hexints { [<.ws><hexint><.ws>] +% ',' }
token hexint {
<[ 0..9 a..f A..F ]>+ [ _ <[ 0..9 a..f A..F ]>+ ]*
}
##########
( run in 0.495 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )