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
def reduce_34(*args): G0 = args[0] R = args[2] G = Token(idt="G") G.place = newtemp() gen('/', G0.place, R.place, G.place) return G
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
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")
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")
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")
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
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
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
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
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")
def reduce_2(*args): return Token(idt="P")
def reduce_3(*args): return Token(idt="B")
def reduce_46(*args): X = args[2] gen('read', X.place, None, None) return Token(idt="W")
def reduce_47(*args): X = args[2] gen('write', X.place, None, None) return Token(idt="T")
def reduce_44(*args): S = Token(idt="S") S.value = '<>' return S
def reduce_29(*args): G = args[0] X = Token(idt="X") X.place = G.place return X
def reduce_42(*args): S = Token(idt="S") S.value = '>=' return S
def reduce_43(*args): S = Token(idt="S") S.value = '==' return S
def reduce_7(*args): I = args[0] L = Token(idt="L") backpatch(I.nextlist, nextstm) return L
def reduce_27(*args): j_command = gen('j', None, None, None) H = Token(idt="H") H.nextlist += [j_command] return H
def reduce_5(*args): return Token(idt="C")
def reduce_37(*args): X = args[1] R = Token(idt="R") R.place = X.place return R
def reduce_36(*args): n = args[0] R = Token(idt="R") R.place = newtemp() gen('=', n.value, None, R.place) return R
def reduce_35(*args): d = args[0] R = Token(idt="R") d.place = d.name R.place = d.place return R
def reduce_32(*args): R = args[0] G = Token(idt="G") G.place = R.place return G
def reduce_6(*args): return Token(idt="L")
def reduce_39(*args): S = Token(idt="S") S.value = '<' return S
def reduce_8(*args): A = args[0] backpatch(A.nextlist, nextstm) return Token(idt="L")
def reduce_40(*args): S = Token(idt="S") S.value = '<=' return S