|Top Previous Next|
Grammar tests > Left recursion
Another possible error of a grammar is the left recursion. The following rule is the simplest example of a left recursion:
a = a | B
To test this rule leads to an infinite regress. To test a, requires to test a before b and so on. Left recursion is not permitted in TETRA; but there is no automatic test for left recursion.
Fortunately left recursion is avoidable. The left recursive rule
a = a C | B
can be rewritten. Clearly a has to begin with B. On B C can follow and on B C another C can follow. So the formal result is:
a = B C *
Applied to the first example, C is an empty symbol, with the result:
a = B
Productions of the well-known parser generator Yacc frequently are left recursive. For Yacc this is no problem, because it doesn't uses a top down analysis like TETRA, but a bottom up parser. (Because of this Yacc can't manage right recursion.) To translate a Yacc grammar into a TETRA grammar, the rule above helps.
This page belongs to the TextTransformer Documentation
|Home Content German|