예제 #1
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #2
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #3
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #4
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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")
예제 #5
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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")
예제 #6
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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")
예제 #7
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #8
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #9
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #10
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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
예제 #11
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
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")
예제 #12
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_2(*args):
    return Token(idt="P")
예제 #13
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_3(*args):
    return Token(idt="B")
예제 #14
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_46(*args):
    X = args[2]
    gen('read', X.place, None, None)
    return Token(idt="W")
예제 #15
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_47(*args):
    X = args[2]
    gen('write', X.place, None, None)
    return Token(idt="T")
예제 #16
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_44(*args):
    S = Token(idt="S")
    S.value = '<>'
    return S
예제 #17
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_29(*args):
    G = args[0]
    X = Token(idt="X")
    X.place = G.place
    return X
예제 #18
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_42(*args):
    S = Token(idt="S")
    S.value = '>='
    return S
예제 #19
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_43(*args):
    S = Token(idt="S")
    S.value = '=='
    return S
예제 #20
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_7(*args):
    I = args[0]
    L = Token(idt="L")
    backpatch(I.nextlist, nextstm)
    return L
예제 #21
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_27(*args):
    j_command = gen('j', None, None, None)
    H = Token(idt="H")
    H.nextlist += [j_command]
    return H
예제 #22
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_5(*args):
    return Token(idt="C")
예제 #23
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_37(*args):
    X = args[1]
    R = Token(idt="R")
    R.place = X.place
    return R
예제 #24
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_36(*args):
    n = args[0]
    R = Token(idt="R")
    R.place = newtemp()
    gen('=', n.value, None, R.place)
    return R
예제 #25
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_35(*args):
    d = args[0]
    R = Token(idt="R")
    d.place = d.name
    R.place = d.place
    return R
예제 #26
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_32(*args):
    R = args[0]
    G = Token(idt="G")
    G.place = R.place
    return G
예제 #27
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_6(*args):
    return Token(idt="L")
예제 #28
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_39(*args):
    S = Token(idt="S")
    S.value = '<'
    return S
예제 #29
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_8(*args):
    A = args[0]
    backpatch(A.nextlist, nextstm)
    return Token(idt="L")
예제 #30
0
파일: forms.py 프로젝트: jansona/CMM_PARSER
def reduce_40(*args):
    S = Token(idt="S")
    S.value = '<='
    return S