RedParse 0.8.2 Released

RedParse version 0.8.2 has been released!

RedParse is a ruby parser written in pure ruby. Instead of YACC or
ANTLR, it’s parse tool is a home-brewed “compiler-interpreter”.
RedParse can correctly parse in excess of 99.5% of existing ruby files.
The RedParse rule set is about a quarter the size of MRI’s YACC-based
parser, and the parse tree format is much prettier than the nests of
emitted by parse_tree or ruby_parser. (RedParse trees are both object-
oriented and a much closer reflection of the actual structure of the


0.8.2 / 2009-04-21

  • 14 Minor Enhancements:

    • should be no tokens left in Node tree now
    • lots of code trying to make things faster (no luck so far)
    • declare types and parameters of variation of all inputs
    • to_parsetree now outputs 1.8.6 (new default) as well as 1.8.7 tree
    • #parsetree takes a session arg instead of thread-local variables
    • reduce number of warnings/noise in test output
    • created #to_parsetree_and_warnings: returns warnings along with a
    • (for now, no warnings are ever emitted, tho)
    • some utilities for working with node trees
    • split off rescue operator and begin…end from ParenedNode
    • made a VarNode to replace VarNameToken in node trees
    • Reg::Repeat#subregs was missing, had to hack one up
    • Reg::LookBack/LookAhead#subregs were missing too
    • unparse now tracks lines in the original src
    • beginnings of support for 1.9 syntax
  • 10 Bugfixes:

    • don’t panic if rubygems not available
    • @lvalue is not useful to clients, so ignore it when comparing trees
    • many improvements to unparser; most expressions now unparse
    • rescue and friends now work in modules, classes and metaclasses
    • word array splitter is perfect now
    • comma and unary star now have right precedence wrt = in all cases
    • fixed miscellaneous minor misparsings
    • some of the remaining ParseTree compatibility bugs removed
    • string contents are now always left unaltered in Node tree output
    • (so escape translation has to be done later, when Nodes are used)
    • #to_parsetree of an empty source text should be happier now