A top-down recursive descent library in Java originally written as a university assignment for a programming paradigms class.
This small library was written in Java as an introduction to top-down parsing. It was originally prototyped by me in Ruby to serve as a mock up for this version. However I quickly saw the greater potential Ruby had for a library of this sort since Ruby can leverage metaprogramming and literal data structures such as the Hash and more flexible Array. Thus the Ruby version of this code, though much more raw, is more concise and elegant, something which I regard quite highly. Later in semester, I will be rewriting this library a third time in Racket.
While Dr. Smith is positive that we well be as frustrated by Racket as
I was with Java, I'm confident that the list and associative list
literals in Racket will be sufficient that a large portion of the evil
hard-coded recognizers, and particularly, the
first() function will
be implemented in a much sleeker and sexier way.
Grab the repo:
hg clone http://bitbucket.org/nuclearsandwich/jtopdowner
Or for the git inclined:
git clone git://github.com/nuclearsandwich/jtopdowner.git
Then just drop it into your project tree. If you want to build
it using the accompanying
Rakefile simply type:
rake at the
command line. Note that this requires a ruby interpreter.
Add a Grammar by defining an implementation of the
then in your running code create an instance of
that grammar. Then just pass it strings and have fun!
License and Copyright
The files A1.java and OrderedTree.java are Copyright Dr. Jeff Smith of San Jose State University and may not be used or reproduced without explicit permission.
All other classes, methods, comments, and disparaging remarks about the Java language are Copyright 2011 Steven! Ragnarök and made available under the GPLv3.
A warning to all students: DO NOT USE THIS CODE TO CHEAT. Please use it to learn more about recursive descent parsing but if you copy this code without citing it, eventually karma will bite you in the ass. Just sayin'.