I have implemented an LL(1) parser generator for the Go programming language. I did this to build parse trees for my HAML parser.
You can find out more about LL(1) parsers at LL Parser (Wikipedia)
You can find out more about GO at golang.org
Check out the wiki for information on the input grammar, the generated file structure, and other stufff (but not much other stuff).
This branch compiles with 6g/8g version release.r60 9481.
For a first draft, yes, I think so. Features include:
- Yacc-like input grammar files
- Ad-Hoc Syntax Directed Translations
- Custom type handling with yystype, %token-, and %type declarations
- “Dev” mode to emit printing instructions for the generated parser
- Package setting
- Sample input.y file with the expected command-line calculator grammar with operator precedence
Just follow the simple directions from the command line.
goinstall "github.com/realistschuckle/goll1e"
pushd $GOROOT/src/pkg/github.com/realistschuckle/goll1e/
make install
popd
Ok, the release and master branches contain code that compiles against the latest documented release of Go. Sometimes, those
awesome and crazy Go guys change the cr4p out of the API and that breaks goll1e. Try switching over to the preview
branch
and compiling that one. I try to keep it up to date with breaking changes to Go.
Just follow the simple directions from the command line:
pushd $GOROOT/src/pkg/github.com/realistschuckle/goll1e/
make nuke
popd
rm -rf $GOROOT/src/pkg/github.com/realistschuckle/goll1e/
Just follow the simple directions from the command line:
git clone git://github.com/realistschuckle/goll1e.git goll1e cd goll1e make gen test/test 1 * 2 + 3 / 4 - 5 eof
Create a grammar file, run goll1e against it, and include that .go file in your project. The command syntax goes something like goll1e input.y output.go
. Then, call the yyparse(int, func(*yystype)int)bool
function. It’ll return true
if the parse succeeded and the result of your computations will exist in yyres[0]
. Otherwise, you’ll get a false
and junk will populate yyres
.
Yep. And, it’ll print to standard out, too. Just type goll1e
at the command prompt after installation and you can type all you want with a CTRL+D to signal EOF.