0.25 2007-07-09 - Pugs::Emitter::Grammar::Perl5 : set sigspace for "rule XXX {...}" and calls the backtracking rule emitter for "regex XXX {...}". - the ratchet rule emitter now saves the emitter params as special comments in the generated code to help debugging. - fixed a bug in the parameter ordering of the ratchet emitter, now examples/digits.grammar no longer loops. - added examples/langs.grammar (this file contains two grammars and the latter calls the subrules of the former and it works!) - added examples/langs2.grammar to demonstrate the use of the "rule foo { ... }" syntax. - added examples/Grammar.grammar which is the grammar spec for Perl 6 regexes themselves. this grammar file can be compiled by util/compile_p6grammar.pl down to a .pm file and replaces lib/Pugs/Grammar/Rule.pmc. - added util/update-rule-pmc-new to automate this process. - updated Rule.pmc using this new approach. It's about 4 times faster than the traditional v6.pm approach! - compile_p6grammar.pl: prepends 'use strict; use warnings' and header comments to the .pm file generated. - Pugs::Compiler::Regex now honors environment PCR_NO_CACHE, which can be used to disable the caching mechanism of PCR (recommended for PCR developers only). 0.24 2007-07-08 - added the bash script util/update-rule-pmc to automate the process of compiling Pugs/Grammar/Rule2.pm (in p6) down to Pugs/Grammar/Rule.pmc (in p5). it supports command line arguments "install", "revert", and "update". now we can call it to generate/update Rule.pmc like this: util/update-rule-pmc # compile only util/update-rule-pmc install # install only util/update-rule-pmc update # compile and then install util/update-rule-pmc revert # svn revert .../Rule.pmc - added util/gen-rule-pmc.pl to post-process the .pmc file generated by v6.pm from Pugs/Grammar/Rule2.pm - implemented Pugs::Compiler::Grammar for compiling grammar spec like this: grammar Foo; token idents { * } rule blah { 'a'* ? } grammar Bar; regex hey { **{2} } - implemented Pugs::Emitter::Grammar::Perl5 for emitting Perl 5 source from grammar ASTs. - added t/04-compiler-grammar.t for testing P::C::Grammar. - added examples/adder.grammar and examples/digits.grammar which can be compiled by compile_p6grammar.pl down to Perl 5 module file. - removed util/compile_p6grammar-token.pl since it's useless now. - Makefile.PL - added File::Slurp as a new dependency to PCR. - reimplemented util/compile_p6grammar.pl using Pugs::Compiler::Grammar - Pugs::Grammar::Rule2.pm - allowed global code blocks "%{ ... %}" in the grammar spec. - Pugs::Grammar::Rule2.pm - added new tokens "alnum", "alpha", "digit", "named_regex", "verbatim", "grammar", and "spec". - updated Pugs::Grammar::Rule.pmc with util/update-rule-pmc accordingly. - Makefile.PL - installs compile_p6grammar.pl by default. - Pugs::Emitter::Rule::Perl5::Ratchet - fixed a bug regarding closures (or actions) in p6 regexes, which does not contain "return". - P::G::Rule2.pm: removed the workaround for { die "..." } since i've already fixed it (see above). - added t/declare/01-sigspace.t to test Pugs::Compiler::Rule's sigspace support. - fixed a bug in Pugs::Compiler::Rule's compile method regarding modifiers with undef values. - more POD documentation for Pugs::Compiler::Rule and Pugs::Compiler::Regex. - fixed POD syntax errors in Precedence.pm and Parsec.pm. - added t/00-pod-coverage.t and t/00-pod.t. - fixed the :continue (:c) issue for the ratchet emitter by sticking with the original $str variable everywhere without passing sub arguments by copy. - fixed a bug in Pugs::Compiler::Regex->compile regarding params handling. - calls use_test_base() in Makefile.PL to bundle Test::Base with inc/. added t/declare to hold declarative tests for PCR - added t/lib/Regex.pm which subclasses Test::Base and serves as the tester scaffold for t/declare/*.t 0.23 2007-05-08 - implemented and - token with non-greedy quantifier is transformed into a greedy quantifier with lookahead: a b*? c -> a [ b ]* c - regex grammar: added and - %($/) is read-write 0.22 2007-03-27 - fixed perl5.10 compatibility - some fixes to character classes - fixed bug: Pugs::Grammar::Base try to autoload DESTROY() 0.21 2007-03-12 - added external/internal 'ignorecase' flag in regex - implemented hex/octal/named constants - \x, \o, \c, \X, \O, \C - added Unicode properties, such as <+isL> <-isL> - added StrPos class (Pugs::Runtime::StrPos) #reverted - Match->from() and Match->to now return Pugs::Runtime::StrPos objects. - for non-OO positions, use Match->to_codes and Match->from_codes - fixed non-capturing subrules in regex - fixed <-alpha> - implemented conjunctions with '&' (not in Regex runtime yet) - implemented negated metasyntax - implemented 0.20 2006-10-13 - each time is set to a new rule, it stores the previous rule in a closure, so that subrules can have their own . - implemented :c :continue - several fixes to HsBridge 0.19 2006-09-27 - removed dependency Data::Dump::Streamer (t/01-iterator_engine.t) - updated Pugs::Runtime::Match pod - $/{0} === $/[0] - Match.kv, Match.elems, Match.chars, Match.yaml - RegexPerl5 accepts parameters i m s x - takes a metasyntax expression (not a rule pattern) - Regex wasn't allowed to match at end of string - Regex runtime detects infinite loop in + and fails - more detailed quantifier parsing; added '**{range}' quantifier (needs emitter support) - HsBridge - implements a Pugs/Haskell-compatible API [ features available inside v6.pm only ] - refactored Rule grammar to use shortcuts, such as { return { after => :$$, } } - fixed '${...}', '$[...]', ':$<...>', '$0' - fixed coercions in emitter [ devel (svn.pugscode.org/pugs/perl5) version only ] "plain_regex" - code cleanup; added bug list - added ^^ $$ \n \N - TimToady++ - /./ matches 2-char newline - <'literal'> - simple character classes, negated char classes - ^ $ \s, \S, etc - , , , - non-capturing group, captures, dot "Pugs::Grammar::RulePure" pure-Perl6 version of the Rule grammar; this file currently can't be run due to PCR/v6 incompatible calling conventions 0.18 2006-09-21 - implemented capturing to return object with <(...)> - implemented Matching against non-strings my $rule = Pugs::Compiler::Regex->compile( '<.meth("param")>' ); my $match = $rule->match( $object ); - implemented - fixed '^' and '$' in regexes 0.17 2006-09-13 - Grammar::Rule is now bootstrapped with v6.pm, instead of lrep - implemented $ - fixed bool result of quantified terms inside tokens - fixed parsing of <'>>'> - replaced 'do{}' with plain function calls in some places (optimization) - implemented hash dispatch in Grammar::Rule (optimization) 0.16 2006-08-21 - removed Class::InsideOut dependency - 5% speed optimization, but there seems to be some gain in RAM usage also - token 0.15 2006-08-16 - stringification is handled by the 'return object', if it exists. - fixed '..' in char classes - ':' is ignored inside tokens - updated the identifier list in Common.pm 0.11 to 0.14 2006-08-09 - several fixes and optimizations in hash and array interpolation - fixed capture aliasing - refactored Regex runtime: -- reuses the matching string in submatches -- resues the Match class for Token/Rule -- more tests - partially implemented 'static' capture numbering 0.10 2006-07-10 - added Pugs::Runtime::Common - contains utilities shared by all perl 6 mini-languages, such as namespace mangling. 0.09 2006-07-06 - 'install()' creates a rule in current namespace - implemented by broquaint - fixed quoting in emitted :ratchet code - implemented '<@rules>' in :ratchet mode 0.08 2006-07-04 - clear a warning in Pugs::Grammar::Rule - fixed by audreyt 0.07 2006-07-04 - updated Module::Install 0.06 2006-06-26 - new module Pugs::Grammar::Precedence 0.05 2006-06-13 - fixed internal rule - new module Pugs::Compiler::RegexPerl5 - wraps a perl5 regex into a method that returns a Match object. Note that this module doesn't provide backtracking to caller rules. 0.04 2006-05-24 - new modules Pugs::Compiler::Token, Pugs::Compiler::Regex - fixed Pugs::Compiler::Rule default switches to :ratchet, :sigspace. - implemented 'sigspace' switch - in :ratchet mode only 0.03 2006-05-20 - '' - in :ratchet mode only - the 'p' switch should now be specified as 'p => 0' instead of 'p => 1'. 'p => 1' now matches at the second character in the string. The default is 'p => undef' - matches anywhere in the string. - added ':ratchet' switch. - implemented parameters in subrule call (named only, constants only) - '', '$' - new class 'Pugs::Grammar::Category' - implemented '%hash', but it doesn't use a trie yet. - fixed subrule backtracking - fixed method 'perl5' - Perl 5 emitter character classes (partially) implemented 0.02 2006-03-28 - new method 'perl5', returns a string that can be eval'ed into a new PCR object - match variables are available inside the rule: $0, $1 - /(.)*/ returns an array in @$0 - built-in rules: alpha, alnum, ... - fixed grammar bug: '$var := (xxx)' is: '$ := (xxx)' - implemented ':' (untested) - Added support for Grammar inheritance - rule methods are internally curryed into functions $rule = sub { Grammar->rule_method( @_ ) } - faster Rule grammar - Simplified 'match', 'capture' keys in internal Match 0.01 - Initial CPAN release - Pod, Tests, Packaging by audreyt & others.