Uputstvo za koriscenje:
-----------------------

Fajl fol.hpp sadrzi minimalni kod sa vezbi dovoljan za predstavljanje
bilo iskaznih bilo formula prvog reda. Implementirano je samo
prikazivanje formula (poboljsano, tako da se zagrade koje nisu neophodne
izostavljaju).

Fajl parser.ypp sadrzi ulazni fajl za Bison. Prevodjenje ovog fajla vrsi
se komandom:

bison -d -o parser.cpp parser.ypp

cime se kreiraju fajlovi parser.cpp i parser.hpp

Fajl lexer.lpp sadrzi ulazni fajl za Flex. Prevodjenje ovog fajla vrsi se
komandom:

flex -o lexer.cpp lexer.lpp

Nakon toga treba samo u Vas projekat da ubacite fajlove parser.cpp, parser.hpp,
lexer.cpp i da prevedete *.cpp fajlove. Detalje komandi mozete videti u 
prilozenom Makefile-u. U Vase *.cpp fajlove treba dodati #include "fol.hpp" 
da bi se videle definisane klase. Fajl "fol.hpp" mozete dopunjavati po
zelji dodatnim funkcionalnostima.

Fajl main.cpp predstavlja primer programa: poziva yyparse(), a zatim ispisuje
formulu. Funkcija yyparse() nakon sto isparsira formulu sa ulaza smesta 
pokazivac na kreiranu formulu u globalnu varijablu parsed_formula. Nakon toga
main() funkcija (ili bilo koja druga) moze preko tog pokazivaca pristupiti
formuli.

Sintaksa koju parser prihvata: 

1) <symbol> je bilo koji identifikator (kao u C-u) koji pocinje malim slovom.
2) <var> je bilo koji identifikator (kao u C-u) koji pocinje velikim slovom.
3) <term> je:
   3a) <var>			-- varijabla
   3b) <symbol>			-- konstanta
   3c) <symbol>(<term_seq>)	-- slozeni term

4) <atomic_formula> je:
   4a) true			-- kljucna rec koja oznacava "Te"
   4b) false			-- kljucna rec koja oznacava "Ne-Te"
   4c) <symbol>			-- iskazna varijabla
   4d) <symbol>(<term_seq>)	-- slozeni atom
   4e) <term> = <term>  	-- jednakost
   4f) <term> ~= <term> 	-- razlicitost

5) <term_seq> je :
   5a) <term>			-- jedan term
   5b) <term1>,...,<termn>	-- sekvenca termova razdvojenih zarezima
   
6) <formula> je:
   6a) <formula> <=> <formula>	-- ekvivalencija
   6b) <formula> => <formula>	-- implikacija
   6c) <formula> | <formula>    -- disjunkcija
   6d) <formula> & <formula>    -- konjunkcija
   6e) ~<formula>  		-- negacija
   6f) ![<var>]:<formula>	-- univerzalni kvantifikator
   6g) ?[<var>]:<formula>	-- egzistencijalni kvantifikator
   6h) <atomic_formula>
   6i) (<formula>)		-- zagrade oko formula su dozvoljene
7) <ulaz> je oblika:
   <formula>;

Dakle, simbol ';' se koristi kao terminator ulaza. Binarni operatori 
imaju nizi prioritet od unarnih. Binarni operatori su levo asocijativni.
Medju binarnim operatorima, najvisi prioritet ima &, a zatim |, => i <=>.
Unarni operatori su svi jednakog prioriteta. Zagrade se mogu koristiti
oko izraza kako bi se promenio prioritet operatora (mogu se koristiti i 
kada nisu neophodne).