szam(Sz) --> jegy(J), maradek(J,Sz).
maradek(Sz0,Sz) --> jegy(J), !, {Sz1 is Sz0*10+J}, maradek(Sz1,Sz); "", {Sz=Sz0}.
jegy(J) --> [D], {D>47, D<58, J is D-48}.

valos_szam(V) --> szam(Sz), ",", tizedes(T), !, {V is Sz+0.1*T} ; szam(V), !; ",", tizedes(T), !, {V is 0.1*T}.
tizedes(T) --> jegy(J), tizedes(T0), !, {T is J+0.1*T0}; "", !, {T is 0}.

kif(K) --> tag(X), maradek_osszeg(X, K).
maradek_osszeg(Eredmeny, O) --> "+", tag(Y), !, {W is Eredmeny+Y},  maradek_osszeg(W, O).
maradek_osszeg(Eredmeny, O) --> "-", tag(Y), !, {W is Eredmeny-Y}, maradek_osszeg(W, O).
maradek_osszeg(Eredmeny, O) --> "", !, {O is Eredmeny}.

tag(T) --> tenyezo(X), maradek_szorzat(X, T).
maradek_szorzat(Eredmeny, Sz) --> "*", !, tenyezo(Y), {W is Eredmeny*Y}, maradek_szorzat(W, Sz).
maradek_szorzat(Eredmeny, Sz) --> "/", !, tenyezo(Y), {W is Eredmeny/Y}, maradek_szorzat(W, Sz).
maradek_szorzat(Eredmeny, Sz) --> "", !, {Sz is Eredmeny}.

tenyezo(T) --> valos_szam(T), !.
tenyezo(T) --> "-", tenyezo(T0), !, {T is -T0}.
tenyezo(T) --> "(", kif(T), ")".