grammar.rules.append(Rule([F], [tNot, F])) grammar.rules.append(Rule([B], [tEq])) grammar.rules.append(Rule([B], [tNeq])) grammar.rules.append(Rule([B], [tLt])) grammar.rules.append(Rule([B], [tLe])) grammar.rules.append(Rule([B], [tGt])) grammar.rules.append(Rule([B], [tGe])) grammar.rules.append(Rule([Z], [tPl])) grammar.rules.append(Rule([Z], [tMi])) grammar.rules.append(Rule([P], [tPl])) grammar.rules.append(Rule([P], [tMi])) grammar.rules.append(Rule([P], [tOr])) grammar.rules.append(Rule([M], [tMu])) grammar.rules.append(Rule([M], [tDi])) grammar.rules.append(Rule([M], [tDiv])) grammar.rules.append(Rule([M], [tMod])) grammar.rules.append(Rule([M], [tAnd])) print "grammar:\n", grammar grammar.removeLeftRecursion() print "left recursions removed: \n", grammar expr = [tOpenBr, tIdentifier, tMi, tConst, tCloseBr, tMu, tOpenBr, tIdentifier, tPl, tIdentifier, tCloseBr] print "expr: %s\n" % ''.join([str(symbol) for symbol in expr]) parser = TopDownParser(grammar) parser.parse(expr)