[Python-es] RE: Una ultima duda con el parser

Hernan Martinez Foffani hernan en orgmf.com.ar
Mie Sep 4 12:45:58 CEST 2002


> si yo tengo esto: 'linux or (sun and (not pc))'
> 
> con el parser consigo que me devuelva:
> 'Or(Terminal('linux'),And(Terminal('sun'),Not(Terminal('pc'))))'
> 
> >>> predParser.parse('expr','linux or (sun and (not pc))')
> "Or(Terminal('linux'),And(Terminal('sun'),Not(Terminal('pc'))))"
> >>> r = predParser.parse('expr','linux or (sun and (not pc))')
> >>> type (r)
> <type 'str'>
> >>> 
> 
> y tengo que esto es tipo string, como puedo hacer que se cree un 
> objeto para luego poder pasarle
> el metodo evaluar, que es dependiente de cada clase, es decir, 
> especifico para el Not, And, Or y
> Terminal.

si Not, And, etc. son metodos de una determinada clase, y
no funciones globales, tenes que cambiar el parser para que
te devuelva algo como:

r = "obj.Or(obj.Terminal('linux'),obj.And(... etc.... "

y luego:

eval(r, {"obj": obj})

donde obj es un objeto de la clase que define los metodos.

-Hernan






Más información sobre la lista de distribución Python-es