public static void OBRADI_definicija_funkcije(){
		String linija = mParser.ParsirajNovuLiniju(); // ucitaj <ime_tipa>
		Izrazi.OBRADI_ime_tipa();
		linija = mParser.ParsirajNovuLiniju(); // ucitaj IDN
		UniformniZnak uz_idn = UniformniZnak.SigurnoStvaranje(linija);
		linija = mParser.ParsirajNovuLiniju(); // ucitaj L_ZAGRADA
		linija = mParser.ParsirajNovuLiniju();
		mLabelaTrenutacneFunkcije = "F_" + uz_idn.mLeksickaJedinka.toUpperCase();
		mIspisivac.DodajKod(null); // radi urednosti
		mIspisivac.PostaviSljedecuLabelu(mLabelaTrenutacneFunkcije);
		if (NaredbenaStrukturaPrograma.PretraziIme_Glo(uz_idn.mLeksickaJedinka) == -1){ // ako nije vec deklarirana
			mIspisivac.DodajGlobalnuVarijablu("G_" + uz_idn.mLeksickaJedinka.toUpperCase(), "DW %D 0");
			Ime_Velicina_Adresa novi = new Ime_Velicina_Adresa();
			novi.mIme = uz_idn.mLeksickaJedinka;
			novi.mAdresa = true;
			novi.mVelicina = 4;
			NaredbenaStrukturaPrograma.mGlobalniDjelokrug.add(novi);
		}
		mIspisivac.DodajPreMainKod("MOVE " + mLabelaTrenutacneFunkcije + ", R0", "definicija funkcije " + uz_idn.mLeksickaJedinka);
		mIspisivac.DodajPreMainKod("STORE R0, (G_" + uz_idn.mLeksickaJedinka.toUpperCase() + ")");
		
		// <<<<<<<<<<<<   funkcija koja prima parametre   >>>>>>>>>>>>
		if (linija.equals("<lista_parametara>")){ 
			List<Ime_Velicina_Adresa> lista_parametara = OBRADI_lista_parametara();			
			linija = mParser.ParsirajNovuLiniju(); // ucitaj D_ZAGRADA
			linija = mParser.ParsirajNovuLiniju(); // ucitaj <slozena_naredba>
			NaredbenaStrukturaPrograma.mStog = lista_parametara;
			Ime_Velicina_Adresa novi = new Ime_Velicina_Adresa(); // dodaj return vrijednost na vrh stoga
			mBrojParametaraTrenutacneFunkcije = lista_parametara.size() + 1;
			novi.mIme = null;
			novi.mAdresa = false;
			novi.mVelicina = 4;
			NaredbenaStrukturaPrograma.mStog.add(novi);
			NaredbenaStrukturaPrograma.OBRADI_slozena_naredba();
			
			mLabelaTrenutacneFunkcije = null;
			NaredbenaStrukturaPrograma.mStog = null;
			mIspisivac.DodajKod("RET", "dodaj RET u slucaju da nije bio eksplicitno pozvan");
			return;
		}
		
		// <<<<<<<<<<<<   funkcija koja ne prima parametre   >>>>>>>>>>>>
		UniformniZnak uz_void = UniformniZnak.SigurnoStvaranje(linija);
		if (uz_void.mNaziv.equals("KR_VOID")){ 
			linija = mParser.ParsirajNovuLiniju(); // ucitaj D_ZAGRADA
			
			// ulazak u funkciju
			linija = mParser.ParsirajNovuLiniju(); // ucitaj <slozena_naredba>
			List<Ime_Velicina_Adresa> lista_parametara = new ArrayList<Ime_Velicina_Adresa>();
			NaredbenaStrukturaPrograma.mStog = lista_parametara;
			Ime_Velicina_Adresa novi = new Ime_Velicina_Adresa(); // dodaj return vrijednost na vrh stoga
			mBrojParametaraTrenutacneFunkcije = lista_parametara.size() + 1;
			novi.mIme = null;
			novi.mAdresa = false;
			novi.mVelicina = 4;
			NaredbenaStrukturaPrograma.mStog.add(novi);
			NaredbenaStrukturaPrograma.OBRADI_slozena_naredba();
			
			mLabelaTrenutacneFunkcije = null;
			NaredbenaStrukturaPrograma.mStog = null;
			mIspisivac.DodajKod("RET", "dodaj RET u slucaju da nije bio eksplicitno pozvan");
			return;
		}
	}