Ejemplo n.º 1
0
def parse_inputx(l0):
    if lexer.current == "":
        return l0
    n = parse_exp2(l0)
    parse_token(lexer.QUEST)
    l0.append(n)
    return parse_inputx(l0)
Ejemplo n.º 2
0
def parse_input(l):
    if lexer.current == '':
        parse_token(lexer.END)
        return l
    parse_token(lexer.QUEST)
    n = parse_exp(l)
    l.append(n)
    return parse_input(l)
Ejemplo n.º 3
0
def parse_inputX(l0):
    if parser.current == lexer.END:
        return l0
    else:
        n = parse_exp2(l0)
        parse_token(lexer.QUEST)
        l0.append(n)
        l = parse_inputX(l0)
        return l
Ejemplo n.º 4
0
def parse_exp1x(l, n1):
    if lexer.current in ["+", "-", "?", ")"]:
        return n1
    elif lexer.current == "*":
        parse_token(lexer.MULT)
        n2 = parse_exp0(l)
        return parse_exp1x(l, n1 * n2)
    elif lexer.current == "/":
        parse_token(lexer.DIV)
        n2 = parse_exp0(l)
        return parse_exp1x(l, n1 / n2)
Ejemplo n.º 5
0
def parse_exp2x(l, n1):
    if lexer.current in ["?", ")"]:
        return n1
    elif lexer.current == "+":
        parse_token(lexer.PLUS)
        n2 = parse_exp1(l)
        return parse_exp2x(l, n1 + n2)
    elif lexer.current == "-":
        parse_token(lexer.MINUS)
        n2 = parse_exp1(l)
        return parse_exp2x(l, n1 - n2)
Ejemplo n.º 6
0
def parse_exp1X(l, n1):
    if parser.current == lexer.MULT:
        parse_token(lexer.MULT)
        n2 = parse_exp0(l)
        n = parse_exp1X(l, n1 * n2)
        return n
    elif parser.current == lexer.DIV:
        parse_token(lexer.DIV)
        n2 = parse_exp0(l)
        n = parse_exp1X(l, n1 / n2)
        return n
    else:
        return n1
Ejemplo n.º 7
0
def parse_exp2X(l, n1):
    if parser.current in {lexer.QUEST, lexer.CPAR}:
        return n1
    elif parser.current == lexer.PLUS:
        parse_token(lexer.PLUS)
        n2 = parse_exp1(l)
        n = parse_exp2X(l, n1 + n2)
        return n
    else:
        print(parser.current)
        parse_token(lexer.MINUS)
        n2 = parse_exp1(l)
        n = parse_exp2X(l, n1 - n2)
        return n
Ejemplo n.º 8
0
def parse_exp0(l):
    if parser.current == lexer.VAR:
        i = parse_token(lexer.VAR)
        return l[i - 1]
    elif parser.current == lexer.MINUS:
        parse_token(lexer.MINUS)
        n0 = parse_exp0(l)
        return -n0
    elif parser.current == lexer.OPAR:
        parse_token(lexer.OPAR)
        n = parse_exp2(l)
        parse_token(lexer.CPAR)
        return n
    else:
        n = parse_token(lexer.INT)
        print(n)
        return n
Ejemplo n.º 9
0
def parse_exp_MINUS(l):
    parse_token(lexer.MINUS)
    n1 = parse_exp(l)
    return -n1
Ejemplo n.º 10
0
def parse_exp_PLUS(l):
    parse_token(lexer.PLUS)
    n1 = parse_exp(l)
    n2 = parse_exp(l)
    return n1 + n2
Ejemplo n.º 11
0
def parse_exp_VAR(l):
    i = parse_token(lexer.VAR)
    return l[i-1]
Ejemplo n.º 12
0
def parse_exp_INT(l):
    return parse_token(lexer.INT)
Ejemplo n.º 13
0
def test_parse_token(token, ast):
    got = parse_token(token)
    assert ast == got
Ejemplo n.º 14
0
 def test_parse_invalid_token(self):
     with self.assertRaises(AssertionError):
         result = parse_token("PPP", 0)
Ejemplo n.º 15
0
 def test_parse_pt_token(self):
     path = 'SB(-1,0)WA'
     action, index = parse_token(path, 1)
     self.assertEqual(action.type, 'B')
     self.assertEqual(action.pt, (-1, 0))
     self.assertEqual(path[index:], 'WA')
Ejemplo n.º 16
0
def parse_exp_MULT(l):
    parse_token(lexer.MULT)
    n1 = parse_exp(l)
    n2 = parse_exp(l)
    return n1 * n2
Ejemplo n.º 17
0
def parse_exp_OPAR(l):
    parse_token(lexer.OPAR)
    n = parse_exp2(l)
    parse_token(lexer.CPAR)
    return n
Ejemplo n.º 18
0
def parse_exp_MINUS(l):
    parse_token(lexer.MINUS)
    n0 = parse_exp0(l)
    return -n0
Ejemplo n.º 19
0
def parse(stream=sys.stdin):
    init_parser(stream)
    l = parse_input()
    parse_token(lexer.END)
    return l
Ejemplo n.º 20
0
def parse_exp_DIV(l):
    parse_token(lexer.DIV)
    n1 = parse_exp(l)
    n2 = parse_exp(l)
    return n1 / n2
Ejemplo n.º 21
0
 def test_parse_simple_token(self):
     action, index = parse_token('WASD', 0)
     self.assertEqual(action.type, 'W')
     self.assertEqual(index, 1)