Could I suggest also looking at a sed-inspired parsing language
(a DSL) which is called nom and is documented at <a href="http://www.nomlang.org" rel="nofollow">http://www.nomlang.org</a>
An example script for parsing symbolic expressions is at
<a href="http://www.nomlang.org/eg/maths.parse.pss" rel="nofollow">http://www.nomlang.org/eg/maths.parse.pss</a> and another which turns the
expressions into LaTeX is /eg/maths.tolatex.pss<p>Nom may seem quite verbose. I have written another language (which compiles
to nom) which I call Syntagma. The syntax of syntagma is much closer to
EBNF but also has powerful additions, such as a "lookahead" syntax, a
negated lookahead syntax (eg: "parse this as an expression if it is not
followed by a multiply operator"). Also, Syntagma has a "condition" syntax,
meaning that a parse rule will only reduce if the attributes of the
parse tokens match certain conditions.<p>An example of an expression parser written in Syntagma is at
<a href="http://www.nomlang.org/syntagma/eg/expr.sta" rel="nofollow">http://www.nomlang.org/syntagma/eg/expr.sta</a> This is much more succinct
than the equivalent nom script. The script /syntagma/eg/expr.toforth.sta
converts symbolic expressions (and assignments) into Forth.<p>Parsing is an interesting topic, but I feel that it is quite difficult
or non-intuitive with some of the traditional tools and methods (at
least for me).