Dit is pseudo huiswerk (het is extra krediet). Ik heb een BST die een index van woorden die verwijzen naar de lijnen (ergens anders opgeslagen), die de woorden bevatten kreeg. Ik moet een manier uit te voeren om te zoeken met behulp van s-uitingen, dus ik kan combineren en (&) en of (|).
Bij de opdrachtprompt een gebruiker kan iets als het type:
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
In wezen dat moeten alle lijnen die de woorden vuur, bos en water, alsmede alle lijnen die oceaan, boot en water bevatten terugkeren.
Wat ik echt nodig te helpen met de logica voor het ontleden en het plaatsen van de knooppunten in de boom om de expressie meer dan de werkelijke code correct weer te geven. Het enige wat ik heb uit die werkte zinvol is voor mij het terugsturen van een set van regels voor elk woord in de expressie. Dan afhankelijk van of het een of of en operatie zou ik een vakbond of het type kruising bewerking uit te voeren op die sets om een nieuwe set te maken en dat doorgeven van de boom.
Ik ben soort van verloren op hoe de lijn die de expressie bevat ontleden. Na enig nadenken blijkt dat de verder uit een van de sub-uitdrukkingen is des te hoger zou moeten zijn in mijn s-expressie boom? Ik denk dat als ik een duw in de goede richting zou kunnen krijgen voor zover het ontleden en het plaatsen van de uitdrukkingen in de boom moet ik OK.
Mijn boom in de steekproef die ik bedacht voor de query hierboven ziet er ongeveer zo;
&
/ \
| water
/ \
& &
/ \ / \
fire forest ocean boat
Dit is logisch als het vuur van een set van regels die bevatten allemaal vuur en het bos zou een set van regels die bevatten allemaal bos terug zou terugkeren. Dan de & niveau zou ik die twee sets te nemen en een andere set die alleen de lijnen die in beide sets waardoor me een set die slechts lijnen die zowel vuur en bos bevatten waren bevatte.
Mijn andere struikelblok is hoe alles in de boom te vertegenwoordigen nadat ik de horde van parsing overwinnen. Ik heb een ExpTreeNode klasse die als knooppunten voor mijn ExpTree (het BST) zal dienen en dan heb ik 2 subklassen, operator en operand, maar ik ben niet zeker of dit is een goede aanpak.













