コード例 #1
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def log_ili_izraz(cvor_stabla):
    #print("U log ili izraz metodi")
    if len(cvor_stabla.lista_djece) == 1:
        log_i_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    else:
        log_ili_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[0].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        log_i_izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
    return
コード例 #2
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def odnosni_izraz(cvor_stabla):
    #print("U odnosni izraz metodi")
    if len(cvor_stabla.lista_djece) == 1:
        aditivni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    else:
        odnosni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[0].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        aditivni_izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
        cvor_stabla.dodaj_kod("\tPOP R1\n")
        cvor_stabla.dodaj_kod("\tPOP R0\n")
        cvor_stabla.dodaj_kod("\tCMP R0, R1\n")

        mapa = {"<": "SLT", ">": "SGT", "<=": "SLE", ">=": "SGE"}

        cvor_stabla.dodaj_kod("\tJP_" +
                              mapa[cvor_stabla.lista_djece[1].vrati_ime()] +
                              " " + "TRUE" + str(config.if_counter_label) +
                              "\n")
        cvor_stabla.dodaj_kod("FALSE" + str(config.if_counter_label) + "\n")
        cvor_stabla.dodaj_kod("\tMOVE 0, R2\n")
        cvor_stabla.dodaj_kod("\tJP " + "ENDIF" +
                              str(config.if_counter_label) + "\n")
        config.if_counter_label += 1
        cvor_stabla.appendKod("TRUE" + str(config.if_counter_label) + "\n")
        cvor_stabla.appendKod("\tMOVE 1, R2\n")
        cvor_stabla.appendKod("ENDIF" + str(config.if_counter_label) + "\n")
        cvor_stabla.appendKod("\tPUSH R2\n")
        config.if_counter_label += 1

    return
コード例 #3
0
def naredba_skoka(cvor_stabla):
    #print("U naredba skoka metodi")

    if len(cvor_stabla.lista_djece) == 3:

        Izrazi.izraz(cvor_stabla.lista_djece[1])
        if config.error:
            return

        tip = PomocneFunkcije.vrati_tip_trenutne_funkcije()

        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[1].vrati_tip(config.doseg),
                tip) or cvor_stabla.lista_djece[1].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[1].kod)
        cvor_stabla.dodaj_kod("\tPOP R6\n\tRET\n")

    else:
        if cvor_stabla.lista_djece[0].podaci.startswith('KR_RETURN'):
            if PomocneFunkcije.vrati_tip_trenutne_funkcije() != 'void':
                PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
                return
            cvor_stabla.dodaj_kod("\tRET\n")
        else:
            if not config.doseg.je_u_petlji:
                PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
                return

    return
コード例 #4
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def unarni_izraz(cvor_stabla):
    #print("U unarni izraz metodi")

    if len(cvor_stabla.lista_djece) == 1:
        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    elif cvor_stabla.lista_djece[1].podaci == "<unarni_izraz>":
        unarni_izraz(cvor_stabla.lista_djece[1])
        if config.error:
            return
        if not cvor_stabla.lista_djece[1].vrati_l_vrijednost(
                config.doseg) or not PomocneFunkcije.je_castable(
                    cvor_stabla.lista_djece[1].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
    else:
        cast_izraz(cvor_stabla.lista_djece[1])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[1].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[1].kod)
        cvor_stabla.dodaj_kod("\tPOP R0\n")
        if cvor_stabla.lista_djece[0].lista_djece[0].vrati_ime() == "-":
            cvor_stabla.dodaj_kod("\tXOR R0, -1, R0\n\tADD R0, 1, R0\n")
        if cvor_stabla.lista_djece[0].lista_djece[0].vrati_ime() == "~":
            cvor_stabla.dodaj_kod("\tXOR R0, %D -1, R0\n")
        cvor_stabla.dodaj_kod("\tPUSH R0\n")
    return
コード例 #5
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def aditivni_izraz(cvor_stabla):
    #print("U aditivni izraz metodi")
    if len(cvor_stabla.lista_djece) == 1:
        multiplikativni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    else:
        aditivni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[0].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        multiplikativni_izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)

        cvor_stabla.dodaj_kod("\tPOP R0\n")
        cvor_stabla.dodaj_kod("\tPOP R1\n")

        if cvor_stabla.lista_djece[1].podaci.startswith("PLUS"):
            cvor_stabla.dodaj_kod("\tADD R0, R1, R0\n")
        else:
            cvor_stabla.dodaj_kod("\tSUB R1, R0, R0\n")
        cvor_stabla.dodaj_kod("\tPUSH R0\n")
    return
コード例 #6
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def bin_i_izraz(cvor_stabla):
    #print("U bin i izraz metodi")
    if len(cvor_stabla.lista_djece) == 1:
        jednakosni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    else:
        bin_i_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[0].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        jednakosni_izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg), "int"):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip("int")
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
        cvor_stabla.dodaj_kod("\tPOP R0\n\tPOP R1\n")
        cvor_stabla.dodaj_kod("\tAND R0, R1, R0\n")
        cvor_stabla.dodaj_kod("\tPUSH R0\n")

    return
コード例 #7
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def izraz_pridruzivanja(cvor_stabla):
    #print("U izraz pridruzivanja metodi")
    if len(cvor_stabla.lista_djece) == 1:
        log_ili_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    elif len(cvor_stabla.lista_djece) > 1:
        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        if not cvor_stabla.lista_djece[0].vrati_l_vrijednost(config.doseg):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        izraz_pridruzivanja(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg),
                cvor_stabla.lista_djece[0].vrati_tip(config.doseg)):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.je_l_vrijednost = False
        loop = 0
        while loop < (len(cvor_stabla.lista_djece[0].kod.split("\n")) - 2):
            cvor_stabla.dodaj_kod(
                cvor_stabla.lista_djece[0].kod.split("\n")[loop] + "\n")
            loop += 1
        cvor_stabla.dodaj_kod("\tPUSH R0\n")
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
        cvor_stabla.dodaj_kod("\tPOP R1\n")
        cvor_stabla.dodaj_kod("\tPOP R0\n")
        cvor_stabla.dodaj_kod("\tSTORE R1, (R0)\n")

    return
コード例 #8
0
def naredba_grananja(cvor_stabla):
    #print("U naredba grananja metodi")

    Izrazi.izraz(cvor_stabla.lista_djece[2])
    if config.error:
        return

    if not PomocneFunkcije.je_castable(
            cvor_stabla.lista_djece[2].vrati_tip(config.doseg),
            'int') or cvor_stabla.lista_djece[2].je_funkcija():
        PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
        return

    naredba(cvor_stabla.lista_djece[4])
    if config.error:
        return

    if len(cvor_stabla.lista_djece) > 5:
        naredba(cvor_stabla.lista_djece[6])
        if config.error:
            return
    cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
    cvor_stabla.dodaj_kod("\tPOP R0\n")
    cvor_stabla.dodaj_kod("\tCMP R0, 0\n")
    cvor_stabla.dodaj_kod("\tJP_EQ " + "ELSE" + str(config.if_counter_label) +
                          "\n")
    cvor_stabla.dodaj_kod("THEN" + str(config.if_counter_label) + "\n")
    cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[4].kod)
    cvor_stabla.dodaj_kod("\tJP " + "ENDIF" + str(config.if_counter_label) +
                          "\n")
    cvor_stabla.dodaj_kod("\tJP_NE " + "ELSE" + str(config.if_counter_label) +
                          "\n")
    cvor_stabla.dodaj_kod("ELSE" + str(config.if_counter_label) + "\n")

    if len(cvor_stabla.lista_djece) == 7:
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[6].kod)

    cvor_stabla.dodaj_kod("ENDIF" + str(config.if_counter_label) + "\n")
    config.if_counter_label += 1

    return
コード例 #9
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def cast_izraz(cvor_stabla):
    #print("U cast izraz metodi")
    if len(cvor_stabla.lista_djece) == 1:
        unarni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela
    else:
        ime_tipa(cvor_stabla.lista_djece[1])
        if config.error:
            return
        cast_izraz(cvor_stabla.lista_djece[3])
        if config.error:
            return
        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[3].vrati_tip(config.doseg),
                cvor_stabla.lista_djece[1].vrati_tip(config.doseg)) and not (
                    cvor_stabla.lista_djece[3].vrati_tip(config.doseg) == "int"
                    and cvor_stabla.lista_djece[1].vrati_tip(config.doseg)
                    == "char") or cvor_stabla.lista_djece[3].je_funkcija(
                    ) or cvor_stabla.lista_djece[1].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[1].vrati_tip(
            config.doseg))
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[3].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[3].labela
    return
コード例 #10
0
def init_deklarator(cvor_stabla):
    #print("U init deklarator metodi")
    cvor_stabla.lista_djece[0].postavi_tip(cvor_stabla.vrati_tip(config.doseg))
    if cvor_stabla.je_konstanta:
        cvor_stabla.lista_djece[0].je_konstanta = True
    if cvor_stabla.je_u_petlji:
        cvor_stabla.lista_djece[0].je_u_petlji = True
    izravni_deklarator(cvor_stabla.lista_djece[0])
    if config.error:
        return
    if len(cvor_stabla.lista_djece) == 1:
        if cvor_stabla.lista_djece[0].je_konstanta:
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        if cvor_stabla.lista_djece[0].tip.startswith("niz"):
            for i in range(cvor_stabla.lista_djece[0].velicina_niza):
                labela = "L" + str(config.brojac_labela)
                config.brojac_labela += 1
                if i == 0:
                    cvor_stabla.labela = labela
                novi = CvorTabliceUpgrade(labela, None)
                novi.je_prazno = True
                config.tabela.append(novi)
            config.doseg.lista_deklaracija[len(config.doseg.lista_deklaracija)
                                           - 1].labela = cvor_stabla.labela
    elif len(cvor_stabla.lista_djece) > 1:
        inicijalizator(cvor_stabla.lista_djece[2])
        if config.error:
            return
        if cvor_stabla.lista_djece[0].tip.startswith("niz"):
            if cvor_stabla.lista_djece[
                    0].velicina_niza <= cvor_stabla.lista_djece[
                        2].velicina_niza:
                config.error = True
            for tip in cvor_stabla.lista_djece[2].vrati_tipove(config.doseg):
                if not PomocneFunkcije.je_castable(
                        tip, cvor_stabla.lista_djece[0].vrati_tip(
                            config.doseg)[3:]):
                    config.error = True
            if config.error:
                PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
                return
            cvor_stabla.labela = cvor_stabla.lista_djece[2].labela
            config.doseg.lista_deklaracija[len(config.doseg.lista_deklaracija)
                                           - 1].labela = cvor_stabla.labela
        else:
            if not PomocneFunkcije.je_castable(
                    cvor_stabla.lista_djece[2].vrati_tip(config.doseg),
                    cvor_stabla.lista_djece[0].vrati_tip(config.doseg)
            ) or cvor_stabla.lista_djece[2].je_funkcija():
                PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
                return
            cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
            labela = cvor_stabla.lista_djece[0].labela
            cvor_stabla.dodaj_kod("\tLOAD R0, (R7)\n")
            cvor_stabla.dodaj_kod("\tSTORE R0, (" + labela + ")\n")
            cvor_stabla.dodaj_kod("\tADD R7, 4, R7\n")
            novi = CvorTabliceUpgrade(labela, cvor_stabla)
            novi.je_prazno = True
            config.tabela.append(novi)
            cvor_stabla.labela = labela
    return
コード例 #11
0
def naredba_petlje(cvor_stabla):
    #print("U naredba petlje metodi")

    if len(cvor_stabla.lista_djece) == 5:

        Izrazi.izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return

        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg),
                'int') or cvor_stabla.lista_djece[2].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        cvor_stabla.lista_djece[4].je_u_petlji = True

        naredba(cvor_stabla.lista_djece[4])
        if config.error:
            return

    if len(cvor_stabla.lista_djece) == 6:

        izraz_naredba(cvor_stabla.lista_djece[2])
        if config.error:
            return

        izraz_naredba(cvor_stabla.lista_djece[3])
        if config.error:
            return

        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[3].vrati_tip(config.doseg),
                'int') or cvor_stabla.lista_djece[3].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        cvor_stabla.lista_djece[5].je_u_petlji = True

        naredba(cvor_stabla.lista_djece[5])
        if config.error:
            return

    if len(cvor_stabla.lista_djece) == 7:

        izraz_naredba(cvor_stabla.lista_djece[2])
        if config.error:
            return

        izraz_naredba(cvor_stabla.lista_djece[3])
        if config.error:
            return

        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[3].vrati_tip(config.doseg),
                'int') or cvor_stabla.lista_djece[3].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        Izrazi.izraz(cvor_stabla.lista_djece[4])
        if config.error:
            return

        cvor_stabla.lista_djece[6].je_u_petlji = True

        naredba(cvor_stabla.lista_djece[6])
        if config.error:
            return

    return
コード例 #12
0
ファイル: Izrazi.py プロジェクト: petar-bubica/PPJ-Labos
def postfiks_izraz(cvor_stabla):
    #print("U postfix izraz metodi", cvor_stabla, cvor_stabla.lista_djece)

    if len(cvor_stabla.lista_djece) == 1:
        primarni_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return

        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = cvor_stabla.lista_djece[
            0].vrati_l_vrijednost(config.doseg)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        cvor_stabla.labela = cvor_stabla.lista_djece[0].labela

    elif cvor_stabla.lista_djece[1].podaci.startswith('L_UGL_ZAGRADA'):

        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return

        if not cvor_stabla.lista_djece[0].vrati_tip(
                config.doseg).startswith('niz'):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        X = cvor_stabla.lista_djece[0].vrati_tip(config.doseg)[3:]
        je_konstanta = cvor_stabla.lista_djece[0].je_konstanta

        izraz(cvor_stabla.lista_djece[2])
        if config.error:
            return

        if not PomocneFunkcije.je_castable(
                cvor_stabla.lista_djece[2].vrati_tip(config.doseg), 'int'):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        cvor_stabla.postavi_tip(X)
        cvor_stabla.je_l_vrijednost = not je_konstanta
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.lista_tipova = cvor_stabla.lista_djece[0].vrati_tipove(
            config.doseg)
        labela = PomocneFunkcije.vrati_vec_deklarirano(
            cvor_stabla.lista_djece[0].vrati_ime()).labela
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
        cvor_stabla.dodaj_kod("\tPOP R0\n")
        cvor_stabla.dodaj_kod("\tSHL R0, %D 2, R0\n")
        cvor_stabla.dodaj_kod("\tMOVE " + labela + ", R1\n")
        cvor_stabla.dodaj_kod("\tADD R0, R1, R0\n")
        cvor_stabla.dodaj_kod("\tLOAD R0, (R0)\n\tPUSH R0\n")

        return

    elif len(cvor_stabla.lista_djece) == 3:

        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return

        if not cvor_stabla.lista_djece[0].je_funkcija(
        ) or cvor_stabla.lista_djece[0].lista_tipova[0] != 'void':
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        cvor_stabla.postavi_tip(cvor_stabla.lista_djece[0].vrati_tip(
            config.doseg))
        cvor_stabla.ime = cvor_stabla.lista_djece[0].vrati_ime()
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)

    elif len(cvor_stabla.lista_djece) == 4:

        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return

        lista_argumenata(cvor_stabla.lista_djece[2])
        if config.error:
            return

        if not cvor_stabla.lista_djece[0].je_funkcija():
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        p_izraz = cvor_stabla.lista_djece[0]
        lista_arg = cvor_stabla.lista_djece[2]
        if len(p_izraz.vrati_tipove(config.doseg)) != len(
                lista_arg.vrati_tipove(config.doseg)):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        for i in range(len(p_izraz.vrati_tipove(config.doseg))):
            if not PomocneFunkcije.je_castable(lista_arg.lista_tipova[i],
                                               p_izraz.lista_tipova[i]):
                PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
                return

        cvor_stabla.postavi_tip(p_izraz.vrati_tip(config.doseg))
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[2].kod)
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)

    elif len(cvor_stabla.lista_djece) == 2:

        postfiks_izraz(cvor_stabla.lista_djece[0])
        if config.error:
            return

        p_izraz = cvor_stabla.lista_djece[0]
        if not p_izraz.vrati_l_vrijednost(
                config.doseg) or not PomocneFunkcije.je_castable(
                    p_izraz.vrati_tip(config.doseg), 'int'):
            PomocneFunkcije.ispisi_error_poruku(cvor_stabla)
            return

        cvor_stabla.postavi_tip('int')
        cvor_stabla.je_l_vrijednost = False
        cvor_stabla.dodaj_kod(cvor_stabla.lista_djece[0].kod)
        if cvor_stabla.lista_djece[1].vrati_ime() == "++":
            cvor_stabla.dodaj_kod("\tPOP R0\n")
            cvor_stabla.dodaj_kod("\tADD R0, 1, R0\n")
            cvor_stabla.dodaj_kod("\tPUSH R0\n")
        else:
            cvor_stabla.dodaj_kod("\tPOP R0\n")
            cvor_stabla.dodaj_kod("\tSUB R0, 1, R0\n")
            cvor_stabla.dodaj_kod("\tPUSH R0\n")

    return