Ragel compiles finite state machines from regular languages into C, C++, Objective-C, D, Java, or Ruby code. It allows the programmer to embed actions at any point in a regular language, and to control non-determinism in the resulting machines. It understands concatenation, union, kleene star, subtraction, intersection, epsilon transitions, and various other common operators. It also supports the construction of scanners and the building of state machines using state charts. It can be used to create very fast recognizers and parsers that are also robust.
Kelbt generates backtracking LALR parsers. A distinguishing characteristic of Kelbt is that it introduces a class of actions called undo actions which are invoked as the backtracker undoes parsing. These allow the user to revert any side effects of forward parsing. Kelbt enables a user-controlled parsing strategy approximating that of generalized recursive-descent parsing. This makes it easy to resolve language ambiguities by ordering the grammar productions of a nonterminal according to precedence.
Here's yet another reason to use getmail: for some silly reason fetchmail will not allow you to concurrently retrieve mail from different servers even though by default it just opens a socket connection to port 25 for delivery. Exactly what is being guarded against?
And aside from all the fetchmail bashing: nice work.
Thank's for writing this! Switching from CVS was very pleasant. I can't even count the number of times I thought to myself "ahh, right on" while learning the Subversion way of doing things.