This is a very basic LL(1) grammar parser capable of parsing any grammar it is given. This is the first compiler I've written and it is extremely primitive. I am putting it in the public space so that others can use it, study it, and fix or improve it. I have created no documentation for it, but others are more than welcome to.
-epsilon rules just use last rule--can we match instead?
-find better handling of overlapping token patterns
-add caching to first and follow