Left recursion

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