You're correct that class methods weren't getting parsed correctly. I never managed to get them completely wired up. The next step is rather involved :/
The changes you made to Neotoma definitely do speed things up. Rather than spending several minutes sucking up memory and swapping, the parser builds almost instantly. The resulting parser though seems to be quite slow compared to the yecc version:
So my question is, is this speed difference due to the modifications you made to improve the speed of generating the parser itself?
I'm thinking the thing to do, before merging this into master (and I'd really like to) is try switching to Sean's "memory" branch of Neotoma, and once that's done, checking the resulting parser into git so it only needs to be rebuilt if modifications are made to the grammar.
If we do that, it might be possible to stop shipping a vendored neotoma and switch to the version that's in agner too:
One thing I did run into... it looks like you're checking the grammar of all .re files in the reia directory. I have this checked out:
=====> Unknown Match!!!!
{'receive',34,
[{clause,35,
[{tuple,35,[{atom,35,tcp},{var,35,'_'},{var,35,line}]}],
[{local_call,36,process_line,
[{remote_call,36,
{remote_call,36,{var,36,line},to_s,[],{nil,1}},
chop,[],
{nil,1}}],
{nil,1}}]},
{clause,37,
[{tuple,37,[{atom,37,line},{var,37,line}]}],
[{local_call,38,send_message,
[{dstring,38,
[{string,38,"PRIVMSG "},
{ivar,38,channel},
{string,38," :"},
{var,38,line}]}],
{nil,1}}]},
{clause,39,[{var,39,msg}],[{nil,1}]}],
void}
{'receive',34,
[{clause,35,
[{tuple,35,[{atom,35,tcp},{var,35,'_'},{var,35,line}]}],
[{local_call,36,process_line,
[{remote_call,36,
{remote_call,36,{var,36,line},to_s,[],{nil,1}},
chop,[],
{nil,1}}],
{nil,1}}]},
{clause,37,
[{tuple,37,[{atom,37,line},{var,37,line}]}],
[{local_call,38,send_message,
[{dstring,38,
[{string,38,"PRIVMSG "},
{ivar,38,channel},
{string,38," :"},
{var,38,line}]}],
{nil,1}}]},
{clause,39,[{var,39,msg}],[{nil,39}]}],
void}