public static Tip_Const_Niz_BrEle_TipFunk PROVJERI_izravni_deklarator(Tip_Const ime_tipa){
		String linija = mParser.ParsirajNovuLiniju(); // ucitaj IDN
		UniformniZnak uz_idn = UniformniZnak.SigurnoStvaranje(linija);
		// morat ce bit null
		ClanTabliceZnakova clT = mSTZ.DohvatiClanIzTabliceZnakovaSamoTrenutacnogDjelokruga(uz_idn.mLeksickaJedinka);
		
		linija = mParser.DohvatiProviriVrijednost();
		UniformniZnak uz_1 = UniformniZnak.SigurnoStvaranje(linija);
		if (uz_1.mNaziv.equals("L_UGL_ZAGRADA")){ // <<<< deklariranje nizova >>>>
			linija = mParser.ParsirajNovuLiniju(); // ucitaj L_UGL_ZAGRADA
			linija = mParser.ParsirajNovuLiniju(); // ucitaj BROJ
			UniformniZnak uz_broj = UniformniZnak.SigurnoStvaranje(linija);
			linija = mParser.ParsirajNovuLiniju(); // ucitaj D_UGL_ZAGRADA
			UniformniZnak uz_d_ugl_zagrada = UniformniZnak.SigurnoStvaranje(linija);
			
			Tip_Const_Niz_BrEle_TipFunk vrati = new Tip_Const_Niz_BrEle_TipFunk();
			ClanTabliceZnakova noviCl = new ClanTabliceZnakova();
			noviCl.mTip = vrati.mTip = ime_tipa.mTip;
			noviCl.mL_izraz = noviCl.mConst = vrati.mConst = ime_tipa.mConst;
			try{
				vrati.mBrElemenata = Integer.parseInt(uz_broj.mLeksickaJedinka);
			}catch(NumberFormatException e){
				// Ponekad nemoze parsirat
				vrati.mBrElemenata = 1025; // taman dosta da javi gresku ovdje dolje.
				
			}
			vrati.mTipFunkcija = null;
			noviCl.mNiz = vrati.mNiz = true;
			noviCl.mDefinirano = true;
			noviCl.mTipFunkcija = null;
			
			if (ime_tipa.mTip == Tip._void || clT != null || vrati.mBrElemenata < 1 || vrati.mBrElemenata > 1024){
				String greska = "<izravni_deklarator> ::= " + uz_idn.FormatZaIspis() + " " + uz_1.FormatZaIspis() + " " +
						uz_broj.FormatZaIspis() + " " + uz_d_ugl_zagrada.FormatZaIspis();
				Utilities_Sem.WriteStringLineToOutputAndExit(greska);
			}
			mSTZ.DodajClanUTablicuZnakova(uz_idn.mLeksickaJedinka, noviCl);
			return vrati;
		}
		
		else if (uz_1.mNaziv.equals("L_ZAGRADA")){ // <<<<< deklaracije funkcija >>>>>
			linija = mParser.ParsirajNovuLiniju(); // ucitaj L_ZAGRADA
			linija = mParser.ParsirajNovuLiniju();
			if (linija.equals("<lista_parametara>")){ // -------- funkcija sa parametrima --------
				List<Tip_LIzraz_Const_Niz_Ime> lista_parametara = PROVJERI_lista_parametara();
				linija = mParser.ParsirajNovuLiniju(); // ucitaj D_ZAGRADA 
				UniformniZnak uz_d_zagrada = UniformniZnak.SigurnoStvaranje(linija);
				Boolean vecPostojecaDeklaracijaOdgovara = true;

				Tip_Const_Niz_BrEle_TipFunk vrati = new Tip_Const_Niz_BrEle_TipFunk();
				ClanTabliceZnakova noviCl = new ClanTabliceZnakova();
				noviCl.mTip = vrati.mTip = Tip._funkcija;
				noviCl.mL_izraz = noviCl.mConst = vrati.mConst = ime_tipa.mConst;
				vrati.mBrElemenata = -1; // nije polje
				noviCl.mTipFunkcija = vrati.mTipFunkcija = new TipFunkcija();
				vrati.mTipFunkcija.mPov = ime_tipa.mTip;
				for (int i = 0; i < lista_parametara.size(); ++i){
					Tip_Const_Niz tcn = new Tip_Const_Niz();
					tcn.mTip = lista_parametara.get(i).mT.mTip;
					tcn.mConst = lista_parametara.get(i).mT.mConst;
					tcn.mNiz = lista_parametara.get(i).mT.mNiz;
					vrati.mTipFunkcija.mParam.add(tcn);
				}
				noviCl.mNiz = vrati.mNiz = false;
				noviCl.mDefinirano = mSTZ.JeliFunkcijaDefinirana(uz_idn.mLeksickaJedinka, noviCl.mTipFunkcija);
				
				if (clT != null){
					if (!Utilities_Sem.FunkcijeIste(clT.mTipFunkcija, noviCl.mTipFunkcija))
						vecPostojecaDeklaracijaOdgovara = false;
				}				
				if (!vecPostojecaDeklaracijaOdgovara){
					String greska = "<izravni_deklarator> ::= " + uz_idn.FormatZaIspis() + " " + uz_1.FormatZaIspis() +
							" <lista_parametara> " + uz_d_zagrada.FormatZaIspis();
					Utilities_Sem.WriteStringLineToOutputAndExit(greska);
				}
				mSTZ.DodajClanUTablicuZnakova(uz_idn.mLeksickaJedinka, noviCl);
				return vrati;
			}
			else{ // --------- funkcija bez parametara ----------
				UniformniZnak uz_void = UniformniZnak.SigurnoStvaranje(linija);
				linija = mParser.ParsirajNovuLiniju(); // ucitaj D_ZAGRADA 
				UniformniZnak uz_d_zagrada = UniformniZnak.SigurnoStvaranje(linija);
				Boolean vecPostojecaDeklaracijaOdgovara = true;

				Tip_Const_Niz_BrEle_TipFunk vrati = new Tip_Const_Niz_BrEle_TipFunk();
				ClanTabliceZnakova noviCl = new ClanTabliceZnakova();
				noviCl.mTip = vrati.mTip = Tip._funkcija;
				noviCl.mL_izraz = noviCl.mConst = vrati.mConst = ime_tipa.mConst;
				vrati.mBrElemenata = -1; // nije polje
				noviCl.mTipFunkcija = vrati.mTipFunkcija = new TipFunkcija();
				vrati.mTipFunkcija.mPov = ime_tipa.mTip;
				noviCl.mNiz = vrati.mNiz = false;
				noviCl.mDefinirano = mSTZ.JeliFunkcijaDefinirana(uz_idn.mLeksickaJedinka, noviCl.mTipFunkcija);
								
				if (clT != null){
					if (clT.mTipFunkcija.mPov != ime_tipa.mTip || clT.mTipFunkcija.mParam.size() != 0)
						vecPostojecaDeklaracijaOdgovara = false;
				}
				if (!vecPostojecaDeklaracijaOdgovara){
					String greska = "<izravni_deklarator> ::= " + uz_idn.FormatZaIspis() + " " + uz_1.FormatZaIspis() + " " +
							uz_void.FormatZaIspis() + " " + uz_d_zagrada.FormatZaIspis();
					Utilities_Sem.WriteStringLineToOutputAndExit(greska);
				}
				mSTZ.DodajClanUTablicuZnakova(uz_idn.mLeksickaJedinka, noviCl);
				return vrati;
			}
		}
		
		else{ // <<<<<generiranje varijabli cjelobrojnog tipa>>>>>
			Tip_Const_Niz_BrEle_TipFunk vrati = new Tip_Const_Niz_BrEle_TipFunk();
			ClanTabliceZnakova noviCl = new ClanTabliceZnakova();
			noviCl.mTip = vrati.mTip = ime_tipa.mTip;
			noviCl.mConst = vrati.mConst = ime_tipa.mConst;
			noviCl.mL_izraz = !noviCl.mConst;
			vrati.mBrElemenata = -1; // nije polje
			noviCl.mTipFunkcija = vrati.mTipFunkcija = null;
			noviCl.mNiz = vrati.mNiz = false;
			noviCl.mDefinirano = true;
			
			if (ime_tipa.mTip == Tip._void || clT != null){
				String greska = "<izravni_deklarator> ::= " + uz_idn.FormatZaIspis();
				Utilities_Sem.WriteStringLineToOutputAndExit(greska);
			}
			mSTZ.DodajClanUTablicuZnakova(uz_idn.mLeksickaJedinka, noviCl);
			return vrati;
		}
	}