Sí, es independiente del contexto. Una fórmula es un árbol, la cual se puede recorrer con una pila. Como los que atravesamos, estamos evaluando cuatro cosas:
- x = 0, y = 0;
- x = 0, y = 1;
- x = 1, y = 0;
- x = 1, y = 1.
En efecto, estamos evaluando cuatro "probados de las fórmulas" en paralelo. Corroborada de fórmula uno con las variables reemplazado por 0 o por 1.
Seamos más precisos y definir la tabla de transición. Suponemos que la fórmula está en pre-orden, es decir, el operador antes de los operandos.
- El estado inicial:
- Si el símbolo actual es "$\lnot$", empujar a la pila el símbolo "($\lnot$, operador de, ?, ?, ?, ?)" y vaya a su estado inicial.
- Si el símbolo actual es "$\to$", empujar a la pila el símbolo "($\to$, operador de, ?, ?, ?, ?)" y vaya a su estado inicial.
- Si el símbolo actual es "x", vaya a la (0, 0, 1, 1) estado.
- Si el símbolo actual es "y", vaya a la (0, 1, 0, 1) estado.
- El (a, b, c, d) estado:
- Si la parte superior el símbolo de la pila es "($\lnot$, operador de, ?, ?, ?, ?)", pop de la pila y vaya a la ($\lnot$a, $\lnot$b, $\lnot$c, $\lnot$d) estado.
- Si la parte superior el símbolo de la pila es "($\to$, operador de, ?, ?, ?, ?)", pop de la pila push "($\to$, primer operando, a, b, c, d)", ir al estado inicial.
- Si la parte superior el símbolo de la pila es "($\to$, primer operando, e, f, g, h)", el pop de la pila, vaya a la (e $\to$ a, f $\to$ b, g $\to$ c, h $\to$ d) estado.
El (a, b, c, d) el estado es una plantilla. En realidad, hay 16 de estos estados: el (0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1) estado y así sucesivamente.
Del mismo modo, la regla de la tercera parte en el genérico (a, b, c, d) el estado es una regla genérica. Hay 16 de tales normas, con (e, f, g, h) = (0, 0, 0, 0), (0, 0, 0, 1), y así sucesivamente.
El (1, 1, 1, 1) el estado tiene una regla:
- Si la pila está vacía, ir a la aceptación de un estado.
OK, este programa tiene un punto débil como se discutió en el segundo comentario. Ahora vamos a definir una versión perfecta.
Asumir dos cosas: 1) La fórmula está en pre-orden, y 2) hay un par de paréntesis alrededor de cada sub-fórmula.
Ahora, la tabla de transición:
- inicio:
- si = (, vaya al operador.
- operador:
- si leer = ~, empuje (~, ?, ?, ?, ?), ir a inicio.
- si leer = ->, empuje (->, ?, ?, ?, ?), ir a inicio.
- si leer = x, push (ret, 0, 0, 1, 1), ir a eval.
- si leer = y, push (ret, 0, 1, 0, 1), ir a eval.
- eval:
- si leer = ), vamos a la parte superior del elemento de ser (ret, a, b, c, d), pop, vaya a (a, b, c, d).
- (a, b, c, d):
- si leer = ) y la parte superior = (~, ?, ?, ?, ?), pop, vaya a (~a, ~b, ~c, ~d).
- si leer = ) y top = (->, e, f, g, h), el pop, vaya a (e -> f -> b, g -> c, h -> d).
- si = ( y superior = (->, ?, ?, ?, ?), pop, push (->, a, b, c, d), vaya al operador.
- (1, 1, 1, 1) tiene una regla:
- si la pila está vacía, aceptar.