Esta es la tarea de pseudo (que es el crédito adicional). Tengo un BST, que es un índice de palabras que apuntan a las líneas (almacenados en otro lugar) que contienen las palabras. Tengo que poner en práctica una forma de buscar el uso de s-expresiones para que pueda combinar y (&) y o (|).
A la orden de solicitar a un usuario podría escribir algo como:
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
Esencialmente que debe devolver todas las líneas que contienen la palabra fuego, bosque y agua, así como todas las líneas que contienen océano, barco y el agua.
Lo que realmente necesita ayuda con la lógica para analizar y nodos de inserción en el árbol para representar adecuadamente la expresión más que el código real. La única cosa que he trabajado que tiene sentido para mí está devolviendo un conjunto de líneas para cada palabra en la expresión. A continuación, dependiendo de si se trata de una u o y operación de E sería realizar una operación de tipo de intersección o unión de estos conjuntos para crear un nuevo conjunto y pasar que en el árbol.
Soy un poco perdido sobre cómo analizar la línea que contiene la expresión. Después de pensarlo parece que el más fuera una de las sub-expresiones es la más alta que debería estar en mi árbol de s-expresión? Creo que si tan sólo pudiera conseguir un empuje en la dirección correcta por lo que el análisis y la inserción de las expresiones en el árbol que debería estar bien.
Mi árbol de ejemplo que se me ocurrió para la consulta anterior se ve algo como;
&
/ \
| water
/ \
& &
/ \ / \
fire forest ocean boat
Esto tiene sentido ya que el fuego podría devolver un conjunto de líneas que contienen todos el fuego y el bosque devolvería un conjunto de líneas que contienen todos los bosques. A continuación, en la Y nivel me gustaría tener esos dos conjuntos y crear otro conjunto que contenía sólo las líneas que estaban en ambos conjuntos de mí, dando así un conjunto que sólo tiene líneas que contienen el fuego y el bosque.
Mi otro escollo es la forma de representar todo en el árbol después de superar el obstáculo del análisis sintáctico. Tengo una clase ExpTreeNode que servirá como los nodos para mi ExpTree (BST) y luego tengo 2 subclases, operador y operando, pero no estoy seguro si esto es un buen enfoque.













