Exemple #1
0
def test():
    jsonpath = sys.argv[1]
    label = sys.argv[2]
    print "jsonpath:" + jsonpath
    lj = utility.LoadJSON("employee.json")
    j = lj.get_json()
    #print j
    #print x["personalRecord"]["name"]
    la = LexicalAnalyzer(jsonpath)
    token_p = la.token_pair()
    q = Query({"data": j}, token_p)
    print json.dumps(q.execute(), indent=4, sort_keys=True)

    filtered_content = Policy().keep_label(q.execute(), label, [])
    print json.dumps(filtered_content, indent=4, sort_keys=True)
Exemple #2
0
    def query(self, path):

        if path == "/":
            #print "returing root obj----------------"
            #print id( self.tree_root)
            return [self.tree_root]
        path_token = LexicalAnalyzer(path).token_pair()
        ini_nodes = [self.tree_root]
        final_nodes = []
        token_pair = path_token

        for tp in token_pair:

            (t1, t2) = tp
            final_nodes = []

            if t1 == "child":
                for root in ini_nodes:
                    # looking into the object
                    for n in root.obj_mem:
                        for (k, v) in n.items():
                            if k == t2:
                                final_nodes.append(v)
                    for n in root.prim_mem:
                        (k, v) = n.items()[0]
                        if k == t2:
                            final_nodes.append(v)
                pass

            elif t1 == "index":
                for root in ini_nodes:
                    t2 = int(t2)
                    try:
                        n = root.array_mem[t2]
                    except:
                        pass
                final_nodes.append(n)
                pass

            elif t1 == "gap":
                for root in ini_nodes:
                    final_nodes = final_nodes + self._gapvalue(t2, root)
                pass
            ini_nodes = final_nodes
        return final_nodes
Exemple #3
0
    def nextToken(self):
        if (self.index + 1) < len(self.list_tokens):
            self.index += 1
            #print(self.list_tokens[self.index])
            #self.showStack()
            return self.list_tokens[self.index]
        else:
            sys.exit("out range")

    def syntaxError(self, expected):
        ct = self.getCurrentToken()
        sys.exit(
            'Syntax error, "{}" expected but "{}" found in line {}'.format(
                expected, ct.token, ct.line))

    def getCurrentToken(self):
        #print '[getCurrentToken]: {}'.format(self.list_tokens[self.index])
        return self.list_tokens[self.index]

    def showStack(self):
        print("########")
        for line in traceback.format_stack():
            print(line)
        print("########")


file_path = '../program.txt'
p = open(file_path, "r").read()
lex = LexicalAnalyzer(p).parse()
SyntacticAnalyzer(lex).program()
Exemple #4
0
from lexical_analyzer import LexicalAnalyzer
from syntax_analyzer import SyntaxAnalyzer
from parse_table import TableGenerator

# project 1: run lexical analyzer and create token file
print '...Starting Lexical Analyzer'
lex = LexicalAnalyzer()
lex.process_file()
print 'Lexical Analyzer has finished running.\n'

# # project 2: create parse table
# print '...Starting Parse Table generator'
# tbl = TableGenerator()
# tbl.generate_parse_table()
# print 'Parse Table created.\n'

# project 2: run syntax analyzer
print '...Starting Syntax Analyzer'
symbol_table = lex.get_symbol_table()
syn = SyntaxAnalyzer(symbol_table)
print 'Syntax Analyzer has finished running.\n'
ap = argparse.ArgumentParser()
ap.add_argument("-f", "--file", required = True, help = "Path to file")
ap.add_argument("-n", "--name", required = False, help = "Name of the generated python file")
args = vars(ap.parse_args())

if not args:
	exit()

f = args['file'].split('.')
if 'asm' != f[-1]:
	print 'Invalid file.'
	exit()

try:
	la = LexicalAnalyzer()
	tokens = la.tokenize(args["file"])
	
	sxa = SyntaxAnalyzer()
	exprs = sxa.analyze(tokens)
	
	ssa = SemanticsAnalyzer()
	ssa.analyze(exprs)
	
	cg = CodeGeneratorFactory.create('python')
	
	filename = 'a' if not args['name'] else args['name']
	
	cg.generate(exprs, filename)
except Exception as e:
	print e
Exemple #6
0
from lexical_analyzer import LexicalAnalyzer
from syntatic_analyzer import SyntaticAnalyzer

INPUT_FILE = 'input'

if __name__ == '__main__':
    LA = LexicalAnalyzer(INPUT_FILE)
    SA = SyntaticAnalyzer(LA, debug=True)
    ast = SA.analyze()
    if ast: ast.traverse()

    # token, value = LA.get_next_token()
    # while token:
    #     print(f'Token: {token} - value: {value}')
    #     token, value = LA.get_next_token()
    def __init__(self):

        self.lex = LexicalAnalyzer()

        t = ParsingTable()

        t.add_action(0, Token.ID, Action.S, 3)
        t.add_action(0, Token.NUMBER, Action.S, 10)
        t.add_action(0, Token.CMD_EXIT, Action.S, 2)
        t.add_action(0, Token.CMD_LIST, Action.S, 2)
        t.add_action(0, Token.CMD_CLEAR, Action.S, 2)
        t.add_action(0, Token.OP_PLUS, Action.S, 8)
        t.add_action(0, Token.OP_MINUS, Action.S, 9)
        t.add_action(0, Token.EOS, Action.S, 1)
        t.add_action(0, Token.OP_LPAREN, Action.S, 11)

        t.add_action(1, Token.EOS, Action.ACCEPT, -1)

        t.add_action(2, Token.EOS, Action.R, 1)

        t.add_action(3, Token.OP_ASSIGN, Action.S, 12)
        t.add_action(3, Token.OP_PLUS, Action.R, 16)
        t.add_action(3, Token.OP_MINUS, Action.R, 16)
        t.add_action(3, Token.OP_MUL, Action.R, 16)
        t.add_action(3, Token.OP_DIV, Action.R, 16)
        t.add_action(3, Token.OP_POW, Action.R, 16)
        t.add_action(3, Token.OP_RPAREN, Action.R, 16)
        t.add_action(3, Token.EOS, Action.R, 16)

        t.add_action(4, Token.OP_PLUS, Action.S, 13)
        t.add_action(4, Token.OP_MINUS, Action.S, 14)
        t.add_action(4, Token.EOS, Action.R, 3)

        t.add_action(5, Token.OP_PLUS, Action.R, 6)
        t.add_action(5, Token.OP_MINUS, Action.R, 6)
        t.add_action(5, Token.OP_MUL, Action.S, 15)
        t.add_action(5, Token.OP_DIV, Action.S, 16)
        t.add_action(5, Token.OP_RPAREN, Action.R, 6)
        t.add_action(5, Token.EOS, Action.R, 6)

        t.add_action(6, Token.OP_PLUS, Action.R, 9)
        t.add_action(6, Token.OP_MINUS, Action.R, 9)
        t.add_action(6, Token.OP_MUL, Action.R, 9)
        t.add_action(6, Token.OP_DIV, Action.R, 9)
        t.add_action(6, Token.OP_RPAREN, Action.R, 9)
        t.add_action(6, Token.EOS, Action.R, 9)

        t.add_action(7, Token.OP_PLUS, Action.R, 10)
        t.add_action(7, Token.OP_MINUS, Action.R, 10)
        t.add_action(7, Token.OP_MUL, Action.R, 10)
        t.add_action(7, Token.OP_DIV, Action.R, 10)
        t.add_action(7, Token.OP_POW, Action.S, 17)
        t.add_action(7, Token.OP_RPAREN, Action.R, 10)
        t.add_action(7, Token.EOS, Action.R, 10)

        t.add_action(8, Token.ID, Action.S, 20)
        t.add_action(8, Token.NUMBER, Action.S, 10)
        t.add_action(8, Token.OP_LPAREN, Action.S, 11)

        t.add_action(9, Token.ID, Action.S, 20)
        t.add_action(9, Token.NUMBER, Action.S, 10)
        t.add_action(9, Token.OP_LPAREN, Action.S, 11)

        t.add_action(10, Token.OP_PLUS, Action.R, 17)
        t.add_action(10, Token.OP_MINUS, Action.R, 17)
        t.add_action(10, Token.OP_MUL, Action.R, 17)
        t.add_action(10, Token.OP_DIV, Action.R, 17)
        t.add_action(10, Token.OP_POW, Action.R, 17)
        t.add_action(10, Token.OP_RPAREN, Action.R, 17)
        t.add_action(10, Token.EOS, Action.R, 17)

        t.add_action(11, Token.ID, Action.S, 20)
        t.add_action(11, Token.NUMBER, Action.S, 10)
        t.add_action(11, Token.OP_PLUS, Action.S, 8)
        t.add_action(11, Token.OP_MINUS, Action.S, 9)
        t.add_action(11, Token.OP_LPAREN, Action.S, 11)

        t.add_action(12, Token.ID, Action.S, 20)
        t.add_action(12, Token.NUMBER, Action.S, 10)
        t.add_action(12, Token.OP_PLUS, Action.S, 8)
        t.add_action(12, Token.OP_MINUS, Action.S, 9)
        t.add_action(12, Token.OP_LPAREN, Action.S, 11)

        t.add_action(13, Token.ID, Action.S, 20)
        t.add_action(13, Token.NUMBER, Action.S, 10)
        t.add_action(13, Token.OP_PLUS, Action.S, 8)
        t.add_action(13, Token.OP_MINUS, Action.S, 9)
        t.add_action(13, Token.OP_LPAREN, Action.S, 11)

        t.add_action(14, Token.ID, Action.S, 20)
        t.add_action(14, Token.NUMBER, Action.S, 10)
        t.add_action(14, Token.OP_PLUS, Action.S, 8)
        t.add_action(14, Token.OP_MINUS, Action.S, 9)
        t.add_action(14, Token.OP_LPAREN, Action.S, 11)

        t.add_action(15, Token.ID, Action.S, 20)
        t.add_action(15, Token.NUMBER, Action.S, 10)
        t.add_action(15, Token.OP_PLUS, Action.S, 8)
        t.add_action(15, Token.OP_MINUS, Action.S, 9)
        t.add_action(15, Token.OP_LPAREN, Action.S, 11)

        t.add_action(16, Token.ID, Action.S, 20)
        t.add_action(16, Token.NUMBER, Action.S, 10)
        t.add_action(16, Token.OP_PLUS, Action.S, 8)
        t.add_action(16, Token.OP_MINUS, Action.S, 9)
        t.add_action(16, Token.OP_LPAREN, Action.S, 11)

        t.add_action(17, Token.ID, Action.S, 20)
        t.add_action(17, Token.NUMBER, Action.S, 10)
        t.add_action(17, Token.OP_PLUS, Action.S, 8)
        t.add_action(17, Token.OP_MINUS, Action.S, 9)
        t.add_action(17, Token.OP_LPAREN, Action.S, 11)

        t.add_action(18, Token.OP_PLUS, Action.R, 12)
        t.add_action(18, Token.OP_MINUS, Action.R, 12)
        t.add_action(18, Token.OP_MUL, Action.R, 12)
        t.add_action(18, Token.OP_DIV, Action.R, 12)
        t.add_action(18, Token.OP_POW, Action.S, 28)
        t.add_action(18, Token.OP_RPAREN, Action.R, 12)
        t.add_action(18, Token.EOS, Action.R, 12)

        t.add_action(19, Token.OP_PLUS, Action.R, 14)
        t.add_action(19, Token.OP_MINUS, Action.R, 14)
        t.add_action(19, Token.OP_MUL, Action.R, 14)
        t.add_action(19, Token.OP_DIV, Action.R, 14)
        t.add_action(19, Token.OP_POW, Action.S, 29)
        t.add_action(19, Token.OP_RPAREN, Action.R, 14)
        t.add_action(19, Token.EOS, Action.R, 14)

        t.add_action(20, Token.OP_PLUS, Action.R, 16)
        t.add_action(20, Token.OP_MINUS, Action.R, 16)
        t.add_action(20, Token.OP_MUL, Action.R, 16)
        t.add_action(20, Token.OP_DIV, Action.R, 16)
        t.add_action(20, Token.OP_POW, Action.R, 16)
        t.add_action(20, Token.OP_RPAREN, Action.R, 16)
        t.add_action(20, Token.EOS, Action.R, 16)

        t.add_action(21, Token.OP_PLUS, Action.S, 13)
        t.add_action(21, Token.OP_MINUS, Action.S, 14)
        t.add_action(21, Token.OP_RPAREN, Action.S, 30)

        t.add_action(22, Token.OP_PLUS, Action.S, 13)
        t.add_action(22, Token.OP_MINUS, Action.S, 14)
        t.add_action(22, Token.EOS, Action.R, 2)

        t.add_action(23, Token.OP_PLUS, Action.R, 4)
        t.add_action(23, Token.OP_MINUS, Action.R, 4)
        t.add_action(23, Token.OP_MUL, Action.S, 15)
        t.add_action(23, Token.OP_DIV, Action.S, 16)
        t.add_action(23, Token.OP_RPAREN, Action.R, 4)
        t.add_action(23, Token.EOS, Action.R, 4)

        t.add_action(24, Token.OP_PLUS, Action.R, 5)
        t.add_action(24, Token.OP_MINUS, Action.R, 5)
        t.add_action(24, Token.OP_MUL, Action.S, 15)
        t.add_action(24, Token.OP_DIV, Action.S, 16)
        t.add_action(24, Token.OP_RPAREN, Action.R, 5)
        t.add_action(24, Token.EOS, Action.R, 5)

        t.add_action(25, Token.OP_PLUS, Action.R, 7)
        t.add_action(25, Token.OP_MINUS, Action.R, 7)
        t.add_action(25, Token.OP_MUL, Action.R, 7)
        t.add_action(25, Token.OP_DIV, Action.R, 7)
        t.add_action(25, Token.OP_RPAREN, Action.R, 7)
        t.add_action(25, Token.EOS, Action.R, 7)

        t.add_action(26, Token.OP_PLUS, Action.R, 8)
        t.add_action(26, Token.OP_MINUS, Action.R, 8)
        t.add_action(26, Token.OP_MUL, Action.R, 8)
        t.add_action(26, Token.OP_DIV, Action.R, 8)
        t.add_action(26, Token.OP_RPAREN, Action.R, 8)
        t.add_action(26, Token.EOS, Action.R, 8)

        t.add_action(27, Token.OP_PLUS, Action.R, 11)
        t.add_action(27, Token.OP_MINUS, Action.R, 11)
        t.add_action(27, Token.OP_MUL, Action.R, 11)
        t.add_action(27, Token.OP_DIV, Action.R, 11)
        t.add_action(27, Token.OP_RPAREN, Action.R, 11)
        t.add_action(27, Token.EOS, Action.R, 11)

        t.add_action(28, Token.ID, Action.S, 20)
        t.add_action(28, Token.NUMBER, Action.S, 10)
        t.add_action(28, Token.OP_PLUS, Action.S, 8)
        t.add_action(28, Token.OP_MINUS, Action.S, 9)
        t.add_action(28, Token.OP_LPAREN, Action.S, 11)

        t.add_action(29, Token.ID, Action.S, 20)
        t.add_action(29, Token.NUMBER, Action.S, 10)
        t.add_action(29, Token.OP_PLUS, Action.S, 8)
        t.add_action(29, Token.OP_MINUS, Action.S, 9)
        t.add_action(29, Token.OP_LPAREN, Action.S, 11)

        t.add_action(30, Token.OP_PLUS, Action.R, 18)
        t.add_action(30, Token.OP_MINUS, Action.R, 18)
        t.add_action(30, Token.OP_MUL, Action.R, 18)
        t.add_action(30, Token.OP_DIV, Action.R, 18)
        t.add_action(30, Token.OP_POW, Action.R, 18)
        t.add_action(30, Token.OP_RPAREN, Action.R, 18)
        t.add_action(30, Token.EOS, Action.R, 18)

        t.add_action(31, Token.OP_PLUS, Action.R, 13)
        t.add_action(31, Token.OP_MINUS, Action.R, 13)
        t.add_action(31, Token.OP_MUL, Action.R, 13)
        t.add_action(31, Token.OP_DIV, Action.R, 13)
        t.add_action(31, Token.OP_RPAREN, Action.R, 13)
        t.add_action(31, Token.EOS, Action.R, 13)

        t.add_action(32, Token.OP_PLUS, Action.R, 15)
        t.add_action(32, Token.OP_MINUS, Action.R, 15)
        t.add_action(32, Token.OP_MUL, Action.R, 15)
        t.add_action(32, Token.OP_DIV, Action.R, 15)
        t.add_action(32, Token.OP_RPAREN, Action.R, 15)
        t.add_action(32, Token.EOS, Action.R, 15)

        t.add_goto(0, Terminal.S, 1)
        t.add_goto(0, Terminal.E, 4)
        t.add_goto(0, Terminal.T, 5)
        t.add_goto(0, Terminal.F, 6)
        t.add_goto(0, Terminal.B, 7)

        t.add_goto(8, Terminal.B, 18)

        t.add_goto(9, Terminal.B, 19)

        t.add_goto(11, Terminal.E, 21)
        t.add_goto(11, Terminal.T, 5)
        t.add_goto(11, Terminal.F, 6)
        t.add_goto(11, Terminal.B, 7)

        t.add_goto(12, Terminal.E, 22)
        t.add_goto(12, Terminal.T, 5)
        t.add_goto(12, Terminal.F, 6)
        t.add_goto(12, Terminal.B, 7)

        t.add_goto(13, Terminal.T, 23)
        t.add_goto(13, Terminal.F, 6)
        t.add_goto(13, Terminal.B, 7)

        t.add_goto(14, Terminal.T, 24)
        t.add_goto(14, Terminal.F, 6)
        t.add_goto(14, Terminal.B, 7)

        t.add_goto(15, Terminal.F, 25)
        t.add_goto(15, Terminal.B, 7)

        t.add_goto(16, Terminal.F, 26)
        t.add_goto(16, Terminal.B, 7)

        t.add_goto(17, Terminal.F, 27)
        t.add_goto(17, Terminal.B, 7)

        t.add_goto(28, Terminal.F, 31)
        t.add_goto(28, Terminal.B, 7)

        t.add_goto(29, Terminal.F, 32)
        t.add_goto(29, Terminal.B, 7)

        t.add_rhs(1, 1)
        t.add_rhs(2, 3)
        t.add_rhs(3, 1)
        t.add_rhs(4, 3)
        t.add_rhs(5, 3)
        t.add_rhs(6, 1)
        t.add_rhs(7, 3)
        t.add_rhs(8, 3)
        t.add_rhs(9, 1)
        t.add_rhs(10, 1)
        t.add_rhs(11, 3)
        t.add_rhs(12, 2)
        t.add_rhs(13, 4)
        t.add_rhs(14, 2)
        t.add_rhs(15, 4)
        t.add_rhs(16, 1)
        t.add_rhs(17, 1)
        t.add_rhs(18, 3)

        t.add_lhs(1, Terminal.S)
        t.add_lhs(2, Terminal.S)
        t.add_lhs(3, Terminal.S)
        t.add_lhs(4, Terminal.E)
        t.add_lhs(5, Terminal.E)
        t.add_lhs(6, Terminal.E)
        t.add_lhs(7, Terminal.T)
        t.add_lhs(8, Terminal.T)
        t.add_lhs(9, Terminal.T)
        t.add_lhs(10, Terminal.F)
        t.add_lhs(11, Terminal.F)
        t.add_lhs(12, Terminal.F)
        t.add_lhs(13, Terminal.F)
        t.add_lhs(14, Terminal.F)
        t.add_lhs(15, Terminal.F)
        t.add_lhs(16, Terminal.B)
        t.add_lhs(17, Terminal.B)
        t.add_lhs(18, Terminal.B)

        # print t

        self.table = t
class Parser:

    def __init__(self):

        self.lex = LexicalAnalyzer()

        t = ParsingTable()

        t.add_action(0, Token.ID, Action.S, 3)
        t.add_action(0, Token.NUMBER, Action.S, 10)
        t.add_action(0, Token.CMD_EXIT, Action.S, 2)
        t.add_action(0, Token.CMD_LIST, Action.S, 2)
        t.add_action(0, Token.CMD_CLEAR, Action.S, 2)
        t.add_action(0, Token.OP_PLUS, Action.S, 8)
        t.add_action(0, Token.OP_MINUS, Action.S, 9)
        t.add_action(0, Token.EOS, Action.S, 1)
        t.add_action(0, Token.OP_LPAREN, Action.S, 11)

        t.add_action(1, Token.EOS, Action.ACCEPT, -1)

        t.add_action(2, Token.EOS, Action.R, 1)

        t.add_action(3, Token.OP_ASSIGN, Action.S, 12)
        t.add_action(3, Token.OP_PLUS, Action.R, 16)
        t.add_action(3, Token.OP_MINUS, Action.R, 16)
        t.add_action(3, Token.OP_MUL, Action.R, 16)
        t.add_action(3, Token.OP_DIV, Action.R, 16)
        t.add_action(3, Token.OP_POW, Action.R, 16)
        t.add_action(3, Token.OP_RPAREN, Action.R, 16)
        t.add_action(3, Token.EOS, Action.R, 16)

        t.add_action(4, Token.OP_PLUS, Action.S, 13)
        t.add_action(4, Token.OP_MINUS, Action.S, 14)
        t.add_action(4, Token.EOS, Action.R, 3)

        t.add_action(5, Token.OP_PLUS, Action.R, 6)
        t.add_action(5, Token.OP_MINUS, Action.R, 6)
        t.add_action(5, Token.OP_MUL, Action.S, 15)
        t.add_action(5, Token.OP_DIV, Action.S, 16)
        t.add_action(5, Token.OP_RPAREN, Action.R, 6)
        t.add_action(5, Token.EOS, Action.R, 6)

        t.add_action(6, Token.OP_PLUS, Action.R, 9)
        t.add_action(6, Token.OP_MINUS, Action.R, 9)
        t.add_action(6, Token.OP_MUL, Action.R, 9)
        t.add_action(6, Token.OP_DIV, Action.R, 9)
        t.add_action(6, Token.OP_RPAREN, Action.R, 9)
        t.add_action(6, Token.EOS, Action.R, 9)

        t.add_action(7, Token.OP_PLUS, Action.R, 10)
        t.add_action(7, Token.OP_MINUS, Action.R, 10)
        t.add_action(7, Token.OP_MUL, Action.R, 10)
        t.add_action(7, Token.OP_DIV, Action.R, 10)
        t.add_action(7, Token.OP_POW, Action.S, 17)
        t.add_action(7, Token.OP_RPAREN, Action.R, 10)
        t.add_action(7, Token.EOS, Action.R, 10)

        t.add_action(8, Token.ID, Action.S, 20)
        t.add_action(8, Token.NUMBER, Action.S, 10)
        t.add_action(8, Token.OP_LPAREN, Action.S, 11)

        t.add_action(9, Token.ID, Action.S, 20)
        t.add_action(9, Token.NUMBER, Action.S, 10)
        t.add_action(9, Token.OP_LPAREN, Action.S, 11)

        t.add_action(10, Token.OP_PLUS, Action.R, 17)
        t.add_action(10, Token.OP_MINUS, Action.R, 17)
        t.add_action(10, Token.OP_MUL, Action.R, 17)
        t.add_action(10, Token.OP_DIV, Action.R, 17)
        t.add_action(10, Token.OP_POW, Action.R, 17)
        t.add_action(10, Token.OP_RPAREN, Action.R, 17)
        t.add_action(10, Token.EOS, Action.R, 17)

        t.add_action(11, Token.ID, Action.S, 20)
        t.add_action(11, Token.NUMBER, Action.S, 10)
        t.add_action(11, Token.OP_PLUS, Action.S, 8)
        t.add_action(11, Token.OP_MINUS, Action.S, 9)
        t.add_action(11, Token.OP_LPAREN, Action.S, 11)

        t.add_action(12, Token.ID, Action.S, 20)
        t.add_action(12, Token.NUMBER, Action.S, 10)
        t.add_action(12, Token.OP_PLUS, Action.S, 8)
        t.add_action(12, Token.OP_MINUS, Action.S, 9)
        t.add_action(12, Token.OP_LPAREN, Action.S, 11)

        t.add_action(13, Token.ID, Action.S, 20)
        t.add_action(13, Token.NUMBER, Action.S, 10)
        t.add_action(13, Token.OP_PLUS, Action.S, 8)
        t.add_action(13, Token.OP_MINUS, Action.S, 9)
        t.add_action(13, Token.OP_LPAREN, Action.S, 11)

        t.add_action(14, Token.ID, Action.S, 20)
        t.add_action(14, Token.NUMBER, Action.S, 10)
        t.add_action(14, Token.OP_PLUS, Action.S, 8)
        t.add_action(14, Token.OP_MINUS, Action.S, 9)
        t.add_action(14, Token.OP_LPAREN, Action.S, 11)

        t.add_action(15, Token.ID, Action.S, 20)
        t.add_action(15, Token.NUMBER, Action.S, 10)
        t.add_action(15, Token.OP_PLUS, Action.S, 8)
        t.add_action(15, Token.OP_MINUS, Action.S, 9)
        t.add_action(15, Token.OP_LPAREN, Action.S, 11)

        t.add_action(16, Token.ID, Action.S, 20)
        t.add_action(16, Token.NUMBER, Action.S, 10)
        t.add_action(16, Token.OP_PLUS, Action.S, 8)
        t.add_action(16, Token.OP_MINUS, Action.S, 9)
        t.add_action(16, Token.OP_LPAREN, Action.S, 11)

        t.add_action(17, Token.ID, Action.S, 20)
        t.add_action(17, Token.NUMBER, Action.S, 10)
        t.add_action(17, Token.OP_PLUS, Action.S, 8)
        t.add_action(17, Token.OP_MINUS, Action.S, 9)
        t.add_action(17, Token.OP_LPAREN, Action.S, 11)

        t.add_action(18, Token.OP_PLUS, Action.R, 12)
        t.add_action(18, Token.OP_MINUS, Action.R, 12)
        t.add_action(18, Token.OP_MUL, Action.R, 12)
        t.add_action(18, Token.OP_DIV, Action.R, 12)
        t.add_action(18, Token.OP_POW, Action.S, 28)
        t.add_action(18, Token.OP_RPAREN, Action.R, 12)
        t.add_action(18, Token.EOS, Action.R, 12)

        t.add_action(19, Token.OP_PLUS, Action.R, 14)
        t.add_action(19, Token.OP_MINUS, Action.R, 14)
        t.add_action(19, Token.OP_MUL, Action.R, 14)
        t.add_action(19, Token.OP_DIV, Action.R, 14)
        t.add_action(19, Token.OP_POW, Action.S, 29)
        t.add_action(19, Token.OP_RPAREN, Action.R, 14)
        t.add_action(19, Token.EOS, Action.R, 14)

        t.add_action(20, Token.OP_PLUS, Action.R, 16)
        t.add_action(20, Token.OP_MINUS, Action.R, 16)
        t.add_action(20, Token.OP_MUL, Action.R, 16)
        t.add_action(20, Token.OP_DIV, Action.R, 16)
        t.add_action(20, Token.OP_POW, Action.R, 16)
        t.add_action(20, Token.OP_RPAREN, Action.R, 16)
        t.add_action(20, Token.EOS, Action.R, 16)

        t.add_action(21, Token.OP_PLUS, Action.S, 13)
        t.add_action(21, Token.OP_MINUS, Action.S, 14)
        t.add_action(21, Token.OP_RPAREN, Action.S, 30)

        t.add_action(22, Token.OP_PLUS, Action.S, 13)
        t.add_action(22, Token.OP_MINUS, Action.S, 14)
        t.add_action(22, Token.EOS, Action.R, 2)

        t.add_action(23, Token.OP_PLUS, Action.R, 4)
        t.add_action(23, Token.OP_MINUS, Action.R, 4)
        t.add_action(23, Token.OP_MUL, Action.S, 15)
        t.add_action(23, Token.OP_DIV, Action.S, 16)
        t.add_action(23, Token.OP_RPAREN, Action.R, 4)
        t.add_action(23, Token.EOS, Action.R, 4)

        t.add_action(24, Token.OP_PLUS, Action.R, 5)
        t.add_action(24, Token.OP_MINUS, Action.R, 5)
        t.add_action(24, Token.OP_MUL, Action.S, 15)
        t.add_action(24, Token.OP_DIV, Action.S, 16)
        t.add_action(24, Token.OP_RPAREN, Action.R, 5)
        t.add_action(24, Token.EOS, Action.R, 5)

        t.add_action(25, Token.OP_PLUS, Action.R, 7)
        t.add_action(25, Token.OP_MINUS, Action.R, 7)
        t.add_action(25, Token.OP_MUL, Action.R, 7)
        t.add_action(25, Token.OP_DIV, Action.R, 7)
        t.add_action(25, Token.OP_RPAREN, Action.R, 7)
        t.add_action(25, Token.EOS, Action.R, 7)

        t.add_action(26, Token.OP_PLUS, Action.R, 8)
        t.add_action(26, Token.OP_MINUS, Action.R, 8)
        t.add_action(26, Token.OP_MUL, Action.R, 8)
        t.add_action(26, Token.OP_DIV, Action.R, 8)
        t.add_action(26, Token.OP_RPAREN, Action.R, 8)
        t.add_action(26, Token.EOS, Action.R, 8)

        t.add_action(27, Token.OP_PLUS, Action.R, 11)
        t.add_action(27, Token.OP_MINUS, Action.R, 11)
        t.add_action(27, Token.OP_MUL, Action.R, 11)
        t.add_action(27, Token.OP_DIV, Action.R, 11)
        t.add_action(27, Token.OP_RPAREN, Action.R, 11)
        t.add_action(27, Token.EOS, Action.R, 11)

        t.add_action(28, Token.ID, Action.S, 20)
        t.add_action(28, Token.NUMBER, Action.S, 10)
        t.add_action(28, Token.OP_PLUS, Action.S, 8)
        t.add_action(28, Token.OP_MINUS, Action.S, 9)
        t.add_action(28, Token.OP_LPAREN, Action.S, 11)

        t.add_action(29, Token.ID, Action.S, 20)
        t.add_action(29, Token.NUMBER, Action.S, 10)
        t.add_action(29, Token.OP_PLUS, Action.S, 8)
        t.add_action(29, Token.OP_MINUS, Action.S, 9)
        t.add_action(29, Token.OP_LPAREN, Action.S, 11)

        t.add_action(30, Token.OP_PLUS, Action.R, 18)
        t.add_action(30, Token.OP_MINUS, Action.R, 18)
        t.add_action(30, Token.OP_MUL, Action.R, 18)
        t.add_action(30, Token.OP_DIV, Action.R, 18)
        t.add_action(30, Token.OP_POW, Action.R, 18)
        t.add_action(30, Token.OP_RPAREN, Action.R, 18)
        t.add_action(30, Token.EOS, Action.R, 18)

        t.add_action(31, Token.OP_PLUS, Action.R, 13)
        t.add_action(31, Token.OP_MINUS, Action.R, 13)
        t.add_action(31, Token.OP_MUL, Action.R, 13)
        t.add_action(31, Token.OP_DIV, Action.R, 13)
        t.add_action(31, Token.OP_RPAREN, Action.R, 13)
        t.add_action(31, Token.EOS, Action.R, 13)

        t.add_action(32, Token.OP_PLUS, Action.R, 15)
        t.add_action(32, Token.OP_MINUS, Action.R, 15)
        t.add_action(32, Token.OP_MUL, Action.R, 15)
        t.add_action(32, Token.OP_DIV, Action.R, 15)
        t.add_action(32, Token.OP_RPAREN, Action.R, 15)
        t.add_action(32, Token.EOS, Action.R, 15)

        t.add_goto(0, Terminal.S, 1)
        t.add_goto(0, Terminal.E, 4)
        t.add_goto(0, Terminal.T, 5)
        t.add_goto(0, Terminal.F, 6)
        t.add_goto(0, Terminal.B, 7)

        t.add_goto(8, Terminal.B, 18)

        t.add_goto(9, Terminal.B, 19)

        t.add_goto(11, Terminal.E, 21)
        t.add_goto(11, Terminal.T, 5)
        t.add_goto(11, Terminal.F, 6)
        t.add_goto(11, Terminal.B, 7)

        t.add_goto(12, Terminal.E, 22)
        t.add_goto(12, Terminal.T, 5)
        t.add_goto(12, Terminal.F, 6)
        t.add_goto(12, Terminal.B, 7)

        t.add_goto(13, Terminal.T, 23)
        t.add_goto(13, Terminal.F, 6)
        t.add_goto(13, Terminal.B, 7)

        t.add_goto(14, Terminal.T, 24)
        t.add_goto(14, Terminal.F, 6)
        t.add_goto(14, Terminal.B, 7)

        t.add_goto(15, Terminal.F, 25)
        t.add_goto(15, Terminal.B, 7)

        t.add_goto(16, Terminal.F, 26)
        t.add_goto(16, Terminal.B, 7)

        t.add_goto(17, Terminal.F, 27)
        t.add_goto(17, Terminal.B, 7)

        t.add_goto(28, Terminal.F, 31)
        t.add_goto(28, Terminal.B, 7)

        t.add_goto(29, Terminal.F, 32)
        t.add_goto(29, Terminal.B, 7)

        t.add_rhs(1, 1)
        t.add_rhs(2, 3)
        t.add_rhs(3, 1)
        t.add_rhs(4, 3)
        t.add_rhs(5, 3)
        t.add_rhs(6, 1)
        t.add_rhs(7, 3)
        t.add_rhs(8, 3)
        t.add_rhs(9, 1)
        t.add_rhs(10, 1)
        t.add_rhs(11, 3)
        t.add_rhs(12, 2)
        t.add_rhs(13, 4)
        t.add_rhs(14, 2)
        t.add_rhs(15, 4)
        t.add_rhs(16, 1)
        t.add_rhs(17, 1)
        t.add_rhs(18, 3)

        t.add_lhs(1, Terminal.S)
        t.add_lhs(2, Terminal.S)
        t.add_lhs(3, Terminal.S)
        t.add_lhs(4, Terminal.E)
        t.add_lhs(5, Terminal.E)
        t.add_lhs(6, Terminal.E)
        t.add_lhs(7, Terminal.T)
        t.add_lhs(8, Terminal.T)
        t.add_lhs(9, Terminal.T)
        t.add_lhs(10, Terminal.F)
        t.add_lhs(11, Terminal.F)
        t.add_lhs(12, Terminal.F)
        t.add_lhs(13, Terminal.F)
        t.add_lhs(14, Terminal.F)
        t.add_lhs(15, Terminal.F)
        t.add_lhs(16, Terminal.B)
        t.add_lhs(17, Terminal.B)
        t.add_lhs(18, Terminal.B)

        # print t

        self.table = t

    def parseIntputString(self, input_str):

        self.init_stack()
        self.lex.set_input(input_str)

        error = False

        for (token, token_string) in self.lex:

            while True:

                try:
                    (action, arg) = self.table.get_action(self.current_state, token)
                    #print 'PARSER: In state %s with token %s, do %s with arg %s' % (self.current_state, token, action, arg)
                except TypeError:  # probably returned None
                    #print 'PARSER: No action for state %s with token %s, error !' % (self.current_state, token)
                    error = True
                    break

                if action == Action.S:

                    if arg == None:
                        error = True
                        break

                    self.push_state(arg)
                    yield (Action.S, token_string, None)
                    break

                elif action == Action.R:

                    if arg == None:
                        error = True
                        break

                    rhs = self.table.get_rhs(arg)
                    lhs = self.table.get_lhs(arg)

                    if lhs == None or rhs == None:
                        error = True
                        break

                    self.pop_states(rhs)

                    goto = self.table.get_goto(self.current_state, lhs)
                    if goto == None:
                        error = True
                        break

                    self.push_state(goto)
                    yield (Action.R, arg, rhs)

                elif action == Action.ACCEPT:
                    raise StopIteration
                else:
                    error = True
                    break

            if error:
                raise ParserException()
                break

    def init_stack(self):
        self.stack = [0]

    def push_state(self, state):
        self.stack.append(state)

    def pop_states(self, number):
        for i in range(number):
            self.stack.pop()

    @property
    def current_state(self):
        return self.stack[-1]