Me han pedido hacer un evaluador de expresiones usando Compuesto , recursiva Descendiente Analizador y intérprete.Utilizando los patrones de intérpretes bajo una estructura compuesta
Aquí está la gramática:
<cond> → <termb> [OR <termb>]*
<termb>→<factb>[AND <factb>]*
<factb>→<expr> RELOP <expr> | NOT <factb> | OPAR <cond> CPAR
<expr> → [PLUS | MINUS] <term> [(PLUS <term>) | (MINUS <term>)]*
<term> → <termp> [(MULT <termp>) | (DIV <termp>) | (REM <termp>)]*
<termp> → <fact> [POWER <fact>]*
<fact> → ID | NUM | OPAR1 <expr> CPAR1
----TERMINALS----
ID → ("A" | ... | "Z" | "a" | ...| "z") [("A"| ... | "Z" | "a" | ...| "z" | "0" | ... | "9")]*
NUM → ("0" | ... | "9") [("0" | ... | "9")]*
OPAR → "("
CPAR → ")"
OPAR1 → "["
CPAR1 → "]"
RELOP → EQ | NEQ | GT | GE | LT | LE
EQ → "= ="
NEQ → "!="
GT → ">"
GE → ">="
LT → "<"
LE → "<="
POWER → "^"
DIV → "/"
REM → "%"
MULT → "*"
MINUS → "−"
PLUS → "+"
AND → “and” or “&&”
OR → “or” or “||”
NOT → “not” or “!”
La asignación es:
El objetivo del proyecto, basado en compuesto, recursiva Builder y intérprete, es conseguir una expresión condicional, hacer un análisis de sintaxis y construir su árbol compuesto. A partir del árbol, tienes que evaluar el resultado de la condición, en base a un contexto externo (leer desde un archivo de propiedades) que contiene el valor de las variables internas
Ahora, la primera cosa que he notado es que intérprete utiliza una estructura compuesta , por lo que parecía una buena idea para extender mi compuesto con una estructura evaluar (: Contexto) método.
He preguntado por ahí, pero me han dicho que esta no es la forma de hacer la tarea. Parece que tengo construir el intérprete árbol, comenzando desde Composite uno (que es bastante absurdo para mí, ya que ya tengo un árbol para trabajar!).
Así que he construido mi árbol usando Compuesto + recursiva Constructor, reconoce la entrada y construir el árbol sin ningún tipo de problema.
Pero la pregunta es: ¿cómo puedo aplicar Intérprete a mi estructura?
Aquí es mi diagrama de clases (algo que es italiano pero es bastante comprensible)
Si lo tengo derecho, intérprete utiliza una clase para cada regla gramatical, por lo que tengo que hacer un cond clase, luego un termb y así sucesivamente.
Pero, ¿los puedo vincular con mi compuesto?
Eso es básicamente lo que pensé desde el principio, pero ¡quizás debería dejar de confiar en las personas que brindan consejos sin saber de qué están hablando! – StepTNT