Pregunta

En referencia a la solución aceptada en: SO: expression_evaluator

¿Alguien puede proporcionar una versión que también funcione con negación? cosas como

((!(0 or !1) and !((0 or 1 or 1) and !1))

necesita trabajar también.

Lo hice funcionar de modo que negar los 0 o 1 está bien, pero no puedo hacer que funcione con la negación de grupos enteros (! al comienzo del paréntesis)

Intenté negar tmp después de regresar de eval en el * expr == '(' block ... if! había sido visto antes de llamarlo, pero eso no funcionó.

¿Fue útil?

Solución

El código en esa respuesta es un poco ad-hoc. El análisis es un campo bien entendido, no hay necesidad de invención. Una de las otras respuestas allí recomienda analizar el análisis de descenso recursivo. Respaldo esa recomendación.

Otros consejos

El algoritmo descrito aquí puede tratar con operadores unarios (operadores que tienen un operando) , así como funciones.

Una vez lo usé como base para un evaluador de expresiones C completo con soporte para variables simbólicas para una consola de línea de comandos en un sistema embebido. No utilicé el código de ejemplo adjunto, sino que lo escribí desde cero para adaptarme a mis propósitos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top