C'est des devoirs pseudo (c'est un crédit supplémentaire). J'ai un BST qui est un index des mots qui pointent vers les lignes (stockées ailleurs) qui contiennent les mots. Je dois mettre en œuvre un moyen de recherche à l'aide s-expressions pour que je puisse combiner et (&) et ou (|).
À l'invite de commande un utilisateur peut taper quelque chose comme:
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
Pour l'essentiel qui devrait renvoyer toutes les lignes qui contiennent le feu des mots, la forêt et l'eau ainsi que toutes les lignes qui contiennent l'océan, le bateau et l'eau.
Ce que je vraiment besoin d'aide avec est la logique de l'analyse syntaxique et d'inserer des noeuds dans l'arbre pour représenter correctement l'expression plus que le code réel. La seule chose que j'ai travaillé que logique me renvoie un ensemble de lignes pour chaque mot dans l'expression. Ensuite, en fonction si elle est un « ou » ou « et » opération j'exécuterait une union ou une opération de type d'intersection sur ces ensembles pour créer un nouveau jeu et passer que sur l'arbre.
Je suis un peu perdu sur la façon d'analyser la ligne qui contient l'expression. Après réflexion, il semble que le « plus » sur l'un des sous-expressions est le plus élevé, il devrait être dans mon arbre de l'expression? Je pense que si je pouvais obtenir un coup de pouce dans la bonne direction dans la mesure où l'analyse syntaxique et l'insertion des expressions dans l'arbre, je devrais être OK.
Mon arbre échantillon que je suis venu avec pour la requête ressemble au-dessus de quelque chose comme;
&
/ \
| water
/ \
& &
/ \ / \
fire forest ocean boat
Cela est logique que le feu retournerait un ensemble de lignes qui contiennent tous des incendies et de la forêt renverrait un ensemble de lignes qui contiennent toutes des forêts. Ensuite, au niveau « et » je prendrais ces deux ensembles et créer un autre ensemble qui ne contenait que les lignes qui étaient dans les deux ensembles me donnant ainsi un ensemble qui a seulement des lignes qui contiennent à la fois le feu et la forêt.
Mon autre pierre d'achoppement est la façon de représenter tout dans l'arbre après avoir surmonté l'obstacle de l'analyse syntaxique. J'ai une classe ExpTreeNode qui servira les nœuds pour mon ExpTree (BST), puis-je avoir 2 sous-classes, opérateur et opérande, mais je ne suis pas sûr que ce soit une bonne approche.













