Skip to content

Instantly share code, notes, and snippets.

@ronaldxs
Created September 18, 2015 15:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ronaldxs/2ced79b6b334009af9db to your computer and use it in GitHub Desktop.
Save ronaldxs/2ced79b6b334009af9db to your computer and use it in GitHub Desktop.
use v6;
#`{{
Combining character classes broken in lots of ways
}}
grammar TestGrammar {
token TOP { ^ <reserved2>+ $ }
token reserved1 { <gen_delims>+ }
token reserved2 { < + gen_delims >+ };
token reserved2a { <+ gen_delims >+ }; # works ok
token reserved3 { <sub-delims>+ };
token reserved4 { <+gen_delims+sub_delims>+ };
# what I really want because of http://www.ietf.org/rfc/rfc3986.txt
token reserved { < + gen-delims + sub-delims >+ };
token gen_delims { <[a]> };
token gen-delims { <[b]> };
token sub_delims { <[c]> };
token sub-delims { <[d]> };
}
say 'Any case that results in a type of (Any) is broken';
my $m = TestGrammar.parse('aaa', :rule<reserved1>);
say $m.WHAT;
$m = TestGrammar.parse('aaa', :rule<reserved2>);
say $m.WHAT;
$m = TestGrammar.parse('aaa', :rule<reserved2a>);
say $m.WHAT;
$m = TestGrammar.parse('ccc', :rule<reserved3>);
say $m.WHAT;
$m = TestGrammar.parse('acac', :rule<reserved4>);
say $m.WHAT;
$m = TestGrammar.parse('bdbd', :rule<reserved>);
say $m.WHAT;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment