TODO for Pugs::Compiler::Rule (PCR) - integrate pure-regex into the main compiler - fix static count for repeated captures: { + } -- the first capture is not captured to array - add rollback for [ x ]+ - should 'unmatch' last 'x' if there is a 'k' after it - add 'negate' node to Regex - add tests for 'negate' - finish remaining metasyntax in Grammar - static signature for '$^a' - add 'inlined' switch to disable PadWalker lookups - fix the rule Unicode: - \v \h \V \H Sigspace switch: - 'doubled' doesn't work my $rule = Pugs::Compiler::Rule->compile('a (b) * c' ); - but this works: my $rule = Pugs::Compiler::Rule->compile('a (b )*c' ); - implement, test in non-ratchet rules Ratchet switch: - quantifiers - implement ?? +? *? - implement ?+ ++ *+ - implement captures to Array inside quantifiers - is :ratchet allowed as a runtime switch? - are there runtime switches? - is :+ the non-ratchet specifier? Perl 6 parser: - implement Perl 6 minilanguages (and categories). each language generate entries for the tokenizer hash <%statement_control|%prefix|%term> - implement the main tokenizer using the minilanguages as terms Priorities: - features used in PGE P6 Grammar - in non-ratchet - char classes - make PadWalker optional, as most distros don't hold PW 1.0 - '%var := xxx'; '@var := xxx'; % := ; @ := - rule parameters - add placeholder 'not implemented' messages in the right places - make Emitter::Rule::Perl5 subclassable - such that closures can be parsed/compiled by a custom parser - make the 'return' block functionally detectable (instead of regex) Bugs: - $variable should look into the user pad Categories (some things belong to P::C::Perl6) : - see "Syntactic categories" in S05 (extensibility) - finish documenting add_op( %options ) - memoize/recompile dynamically - special cases (test): + [ +]* ? 1;;;2 - ignore extra ;;? 1,,2 1, 2, 1 Y 2 Y loop ($a;;$b) { ... } - special form via macro? Tests: - unify ratchet/non-ratchet tests - add categories looser/tighter than current boundaries - backtracking control ':' - <'... code() to PCR->as_method() TODO for Pugs-Compiler-Precedence - needs to use category identifiers, like INFIX maybe INFIX_004 for category+precedence? - \s{ is an expression terminator if the parser is expecting an operator - add is-parsed to the appropriate category in op-precedence and tokenizer = Implemented Features -- update this! #comment\n . ? * + *? +? ?? literal [] () | <'literal'> <$var> -- implemented in :ratchet mode only -- constant parameters only %hash <@var> -- special-cased for array-of-rule (but not Rule|Str) \char -- not all chars implemented {code} -- non-capturing closure -- perl5 syntax inside closure -- $/ doesn't work yet { return code } -- capturing closure -- perl5 syntax inside closure -- $/ works $var := (capture) -- capture aliasing $<> $/<> -- special variables can't be used inside a match yet $/ $<0> $<1> $0 $1 \n \N $^a $^b -- positional parameters (must start with $^a) ^ $ : $/ $() - global match variables $var := [non-capture] $var := = Unimplemented or untested features @var := [non-capture] @var := $variable @variable $/<0> $/<1> $/0 $/1 <"literal"> ^^ $$ <+unicode-class> <+unicode-class+unicode-class> <&var> <%var> **{n..m} :: ::: (commit) <(return-object)> <{code-returns-rule}> <> <[character-class]> :flag :flag() :flag[] \x0a \o123 ... & $1 - lvalue match variables