Buenas gente

aqui les dejo el siguiente evaluador, esta en notacion funcional espero les sirva, lo saque de los apuntes de la catedra de algoritmica de la UNSa (Argentina) no se si alguien lo habra publicado ya de todos modos aqui les va, esta hecho para la siguiente gramatica:
E T | E( ‘+’ | ‘ -’) T
T F | T (‘*’ | ‘/’ ) F
F P | P^F | ‘-’ F
P N | ‘(‘ E ‘)’
N D | ND
D ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ | ‘0’
Eval E(e)= evale1(evalt(e))
evale1((n,e))=
si(e=vacio | no(e1='+' | e1='-')) (n,e)
sino
sea
(m,f) =evalT (resto(e))
si (e1='+') evale1((n+m),f)
sino evale1((n-m),f)
evalT(e)= evalT1(evalF(e))
Evalt1(n,e)=
si (e=vacio | no (e1='*' | e1='/')) (n,e)
sino
sea
(m,f) = evalF ( resto (e))
si (e1 = '*' ) evalT1 ( (n*m),f)
sino evalT1 ( ( n/m ) ,f )
evalF(e)=
si(e1='-')
sea (n,f) = evalf ( resto (e) ) (-n,f)
sino
si (e1='+') evalf ( resto(e) )
sino
sea (n,f)= evalp (e)
si (f=vacio | l1<> ^) (n,f)
sino
sea (m,g)= evalf (resto(f))
(m,g)
evalp(e)=
si (e1 es digito) evaln(e)
sino
si (e1='(' )
sea (n,f)=evale (resto(e))
si (f=')' ) (n,resto(f))
sino
error
evaln(e) = evaln1(n,e)
evaln1(n,e)=
si(e=vacio | e1 no es digito) (n,e)
sino evaln1(10n+valor(e1),resto(e))
valor('0')=0;
valor('1')=1;
etc.
Bueno espero les guste nos vemos gente

, espero se entienda

.