Add/dollar

Wanting to simplify how you use the grammar. Really you should just define basically a hierarchy of simple expressions, where the leaf expressions are just simple regexps or strings. This would mean you don't ever really have to pass in a function.

Thinking about doing it this way so that you always get a Concrete Syntax Tree from a grammar, with no processing. You can then use this CST for syntax highlighters, linting, etc. But it does no processing at all of the text. If you can assume that, then you don't need to pass in functions at all it seems!

Then you have another layer for mapping the CST to an AST:

https://github.com/getify/concrete-syntax-tree/issues/3

This way we can reuse the grammars for more complex things like compilation / transpilation. Would make things way simpler and much more powerful.

The implementation here isn't ideal yet tho, still working through it.