Grammars are useful models when designing software that processes data
with a recursive structure The best known example is a parser the
component of a compiler that deals with the recursively nested features
of the typical programming language such as expressions arithmetic
conditional and so on For instance a grammatical rule like E E E
states that an expression can be formed by taking any two expressions
and connecting them by a plus sign
this rule is typical of how expressions