Layed out ADTs for non-terminals
C implementation is taking too long, planning rewrite in Ruby