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”.
Currently,
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
arrays
emitted by parse_tree or ruby_parser. (RedParse trees are both object-
oriented and a much closer reflection of the actual structure of the
original
source.)
Changes:
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
formats - #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
tree - (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
correctly - 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