It generally isnât 
Where the future is concerned, I would rather show then tell.
As to differences from Lemon, first of all, it emits Zig, which has consequences. Lemon parsers rely extensively on macro preprocessing, an option I did not have. I found a project golemon, which is itself pretty remarkable: the author ported Lemon to Go, made it emit Go code, then ported Pikchr to emit Go code using golemon, all so that he could embed Pikchr diagrams easily in his Hugo-based blog.
That was helpful in establishing a strategy to defeat the macro monster. What Zig does have is comptime, so macros used for conditional inclusion were just translated to comptime if statements, and textual inclusion macros were replaced with a HashMap which finds bits of the template and replaces them with the needful.
There were further changes needed to make it possible to use try inside user code, which I consider a requirement. defer to the rescue!
None of that is user-visible, however. In terms of what is, I completely reworked options parsing to behave in a more familiar manner, and rigged it so that command-line options can also be supplied as build options, since Zig projects will presumably want to use Zitron from the Zig build system, a procedure I have documented.
There are a number of special directives which are Zig-specific, C-specific build flags removed, and the like.
I also added a âditto ruleâ as syntax shorthand:
expr(A) ::= expr(B) PLUS expr(C). { ... }
`` expr(B) TIMES expr(C). { ... }
`` LPAREN expr(E) RPAREN. { ... }
`` ::= VALUE(A).
As an alternative to repeating expr(A) for each production (which is also permitted). Aesthetically I would suggest either including the optional ::=, or not, rather than both as in the example. Thatâs just to show that both are possible.
The named actions, and %impl directives which use them, are also novel. Iâm pretty happy with how they turned out 