Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

78 lines (63 sloc) 2.09 kb
use v6;
use Test;
# L<S05/Modifiers/Any grammar regex is really just a kind of method>
grammar DeclaratorTest1 {
token TOP {
|| a <a>
|| b <b>
|| c <c>
|| d <d>
}
token a {
:constant $x = 'foo';
$x
}
token b {
:my $y = ' yack';
$y $y
}
token c {
:state $z++;
$z
}
token d {
:our $our = 'zho';
$our
}
}
ok DeclaratorTest1.parse( 'afoo' ), 'can declare :constant in regex';
is ~$/, 'afoo', '... and it matched the constant';
ok !DeclaratorTest1.parse( 'abar' ), 'does not work with wrong text';
ok DeclaratorTest1.parse( 'b yack yack' ), 'can declare :my in regex';
is ~$/, 'b yack yack', 'correct match with "my" variable';
ok !DeclaratorTest1.parse('b yack shaving'), 'does not work with wrong text';
ok DeclaratorTest1.parse('c1'), ':state in regex (match) (1)';
is ~$/, 'c1', ':state in regex ($/) (1)';
ok DeclaratorTest1.parse('c2'), ':state in regex (match) (2)';
is ~$/, 'c2', ':state in regex ($/) (2)';
ok !DeclaratorTest1.parse('c3'), ':state in regex (no match)';
ok DeclaratorTest1.parse('dzho'), ':our in regex (match)';
is ~$/, 'dzho', ':our in regex ($/)';
is $DeclaratorTest1::our, 'zho', 'can access our variable from the outside';
{
my $a = 1;
regex ta { :temp $a = 5; <ma> };
regex ma { $a $a };
ok '11' ~~ m/ ^ <ma> $ /, "can access variables in regex (not temp'ed)";
ok '55' !~~ m/ ^ <ma> $ /, "(-) not temp'ed";
is $a, 1, "temp'ed variable still 1";
ok '55' ~~ m/ ^ <ta> $ /, "can access temp'ed variable in regex (+)";
ok '11' !~~ m/ ^ <ta> $ /, "(-) temp'ed";
is $a, 1, "temp'ed variable again 1";
}
{
my $a = 1;
regex la { :let $a = 5; <lma> };
regex lma { $a $a };
ok '23' !~~ m/ ^ <la> $ /, 'can detect a non-match with :let';
is $a, 1, 'unsuccessful match did not affect :let variable';
ok '55' ~~ m/ ^ <la> $ /, 'can match changed :let variable';
is $a, 5, 'successful match preserves new :let value';
}
done;
# vim: ft=perl6 sw=4 ts=4 expandtab
Jump to Line
Something went wrong with that request. Please try again.