Pugs-Compiler-Rule

 view release on metacpan or  search on metacpan

TODO  view on Meta::CPAN

TODO for Pugs::Compiler::Rule (PCR)

* 2007-07-08

- examples/digits.grammar loops
- add support for C<\{> and C<\}>:
        grammar Foo;

        regex block {
            \{ (<any>+) \}
        }
- add support for
    token quoted_string { \" <-[\"]>* \" }

* 2007-04-30

- <rule( param... )> doesn't always emit the parameter list

* 2007-03-09

- reuse kp6's AST processor
  - fix repeated capture counting problems

- remove PadWalker dependency?

- move all unicode tables (\n, \t, \v, \h, char classes) into 
  Pugs::Emitter::Rule::Perl5::CharClass

- try to compile Perl-6.0.0-STD.pm 

- finish | || & &&
  - DFA
  - [done] check precedence in Rule2.pm
  - workaround Rule2.pm problems (see the header in that file)
    (see MP6 for a workaround)

- document how to install a rule using eval $rule->source
  in order to access local variables (without PadWalker)

- implement compile-as-closure in order to allow ratchet/non-ratchet in
  the same rule

- finish **{...} implementation
- finish modifiers implementation

- check failing (infinite-loop) tests

* OLDER TODO

- integrate pure-regex into the main compiler

- fix static count for repeated captures: 
  { <x> <x>+ }  -- the first capture is not captured to array

- add rollback for [ x <!before k> ]+
  - 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 <ws> rule

Sigspace switch:

- 'doubled' <ws> 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
- <after ...> in non-ratchet

- make PadWalker optional, as most distros don't hold PW 1.0

- '%var := xxx'; '@var := xxx'; %<var> := ; @<var> :=

- 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):
  <tight> <op>+ [<tight> <op>+]* <tight>?
  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 ':' 

- <'... <?... <!...

Related projects:

- implement PCR using pugs

- implement Pugs::Compiler::PILN ?
  - not a priority - p5 could load ready-made YAML from Pugs

Other:

- see 'not implemented' messages in Pugs::Emitter::Rule::Perl5

- closures should be called on the Match object

- rule documentation (shorter than S05)
- examples of use

- incomplete rule syntax (see Pugs::Compiler::Rule pod); 
- more escaped chars



( run in 0.826 second using v1.01-cache-2.11-cpan-5837b0d9d2c )