Ejemplo n.º 1
0
def reduce_33(*args):
    G0 = args[0]
    R = args[2]
    G = Token(idt="G")
    G.place = newtemp()
    gen('*', G0.place, R.place, G.place)
    return Token(idt="G")
Ejemplo n.º 2
0
def reduce_16(*args):
    d = args[0]
    X0 = args[2]
    X1 = args[5]
    d.place = d.name
    gen('=', X1.place, None, "{}+{}".format(d.place, X0.place))
    return Token(idt="F")
Ejemplo n.º 3
0
def reduce_38(*args):
    d = args[0]
    X = args[2]
    R = Token(idt="R")
    d.place = d.name
    R.place = "{}+{}".format(d.place, X.place)
    return R
Ejemplo n.º 4
0
def reduce_12(*args):
    E = args[0]
    d = args[1]
    d.place = d.name
    gen('new', E.value, None, d.place)
    gen('=', '0', None, d.place)
    return Token(idt="F")
Ejemplo n.º 5
0
def reduce_31(*args):
    X0 = args[0]
    G = args[2]
    X = Token(idt="X")
    X.place = newtemp()
    gen('-', X0.place, G.place, X.place)
    return X
Ejemplo n.º 6
0
def reduce_25(*args):
    O = args[2]
    M = args[4]
    L = args[5]
    I = Token(idt="I")
    backpatch(O.truelist, M.gotostm)
    I.nextlist += O.falselist + L.nextlist
    return I
Ejemplo n.º 7
0
def reduce_15(*args):
    E = args[0]
    d = args[1]
    n = args[3]
    d.place = d.name

    if int(n.value) <= 0:
        raise ParseErrData(
            SEM_ERR, int(n.line),
            "The size of array must be positive but got {}".format(n.value),
            Token(idt="F"))

    for i in range(int(n.value)):
        gen('new', E.value, None, "{}+{}".format(d.place, i))
        gen('=', '0', None, "{}+{}".format(d.place, i))

    return Token(idt="F")
Ejemplo n.º 8
0
def reduce_28(*args):
    X0 = args[0]
    S = args[1]
    X1 = args[2]
    O = Token(idt="O")
    js_command = gen(S.value, X0.place, X1.place, None)
    j_command = gen('j', None, None, None)
    O.truelist.append(js_command)
    O.falselist.append(j_command)
    return O
Ejemplo n.º 9
0
def reduce_45(*args):
    M0 = args[2]
    O = args[3]
    M1 = args[5]
    B = args[6]
    backpatch(B.nextlist, M0.gotostm)
    backpatch(O.truelist, M1.gotostm)
    A = Token(idt="A")
    A.nextlist += O.falselist
    gen('j', None, None, M0.gotostm)
    return A
Ejemplo n.º 10
0
def reduce_13(*args):
    E = args[0]
    d = args[1]
    n0 = args[3]
    n1 = args[7]
    N = args[8]
    d.place = d.name
    for i in range(int(n0.value)):
        gen('new', E.value, None, "{}+{}".format(d.place, i))
        gen('=', '0', None, "{}+{}".format(d.place, i))
    gen('=', n1.value, None, "{}+{}".format(d.place, 0))
    for index, n in enumerate(N.value):
        gen('=', n, None, "{}+{}".format(d.place, index + 1))

    if int(n.value) <= 0:
        raise ParseErrData(
            SEM_ERR, int(n.line),
            "The size of array must be positive but got {}".format(n.value),
            Token(idt="F"))

    return Token(idt="F")
Ejemplo n.º 11
0
def reduce_23(*args):
    O = args[2]
    M0 = args[4]
    B0 = args[5]
    H = args[6]
    M1 = args[8]
    B1 = args[9]
    I = Token(idt="I")
    backpatch(O.truelist, M0.gotostm)
    backpatch(O.falselist, M1.gotostm)
    I.nextlist += (B0.nextlist + H.nextlist + B1.nextlist)
    return I
Ejemplo n.º 12
0
def reduce_2(*args):
    return Token(idt="P")
Ejemplo n.º 13
0
def reduce_3(*args):
    return Token(idt="B")
Ejemplo n.º 14
0
def reduce_46(*args):
    X = args[2]
    gen('read', X.place, None, None)
    return Token(idt="W")
Ejemplo n.º 15
0
def reduce_47(*args):
    X = args[2]
    gen('write', X.place, None, None)
    return Token(idt="T")
Ejemplo n.º 16
0
def reduce_44(*args):
    S = Token(idt="S")
    S.value = '<>'
    return S
Ejemplo n.º 17
0
def reduce_27(*args):
    j_command = gen('j', None, None, None)
    H = Token(idt="H")
    H.nextlist += [j_command]
    return H
Ejemplo n.º 18
0
def reduce_42(*args):
    S = Token(idt="S")
    S.value = '>='
    return S
Ejemplo n.º 19
0
def reduce_43(*args):
    S = Token(idt="S")
    S.value = '=='
    return S
Ejemplo n.º 20
0
def reduce_7(*args):
    I = args[0]
    L = Token(idt="L")
    backpatch(I.nextlist, nextstm)
    return L
Ejemplo n.º 21
0
def reduce_29(*args):
    G = args[0]
    X = Token(idt="X")
    X.place = G.place
    return X
Ejemplo n.º 22
0
def reduce_5(*args):
    return Token(idt="C")
Ejemplo n.º 23
0
def reduce_37(*args):
    X = args[1]
    R = Token(idt="R")
    R.place = X.place
    return R
Ejemplo n.º 24
0
def reduce_36(*args):
    n = args[0]
    R = Token(idt="R")
    R.place = newtemp()
    gen('=', n.value, None, R.place)
    return R
Ejemplo n.º 25
0
def reduce_35(*args):
    d = args[0]
    R = Token(idt="R")
    d.place = d.name
    R.place = d.place
    return R
Ejemplo n.º 26
0
def reduce_32(*args):
    R = args[0]
    G = Token(idt="G")
    G.place = R.place
    return G
Ejemplo n.º 27
0
def reduce_6(*args):
    return Token(idt="L")
Ejemplo n.º 28
0
def reduce_39(*args):
    S = Token(idt="S")
    S.value = '<'
    return S
Ejemplo n.º 29
0
def reduce_8(*args):
    A = args[0]
    backpatch(A.nextlist, nextstm)
    return Token(idt="L")
Ejemplo n.º 30
0
def reduce_40(*args):
    S = Token(idt="S")
    S.value = '<='
    return S