<resending with the program as an attachment, as 100K is considered big here, and no images hidden in reply. moderator, you can kill the prior messages. computers are hard.>

To show you what I mean, here is a parser I wrote recently for a simple Go expression evaluator, in Go. It has all Go's precedence levels and operators. The one odd detail is that >= etc. can be combined, as in 1 >= 2 > 3, but that doesn't matter in the context of this program and is easily avoided with a few more lines in cmpList.

I'm using a screen grab because GMail refuses to leave my indentation alone. I left factor off. It's got all the usual details but it's the leaf of the grammar and of no interest here.

Note that this could easily have been made a table instead of a bunch of one-line functions.

Parsers are easy to write. It took us a generation (or more) to understand that, but it's remarkable nonetheless. The first big step might have been realizing that recursion was a good idea, even if you weren't writing LISP, if the data structure is itself recursive.

-rob