पार्सिंग और निर्माण एस भाव सेट और द्विआधारी खोज वृक्ष का उपयोग कर

वोट
1

इस छद्म होमवर्क (यह अतिरिक्त क्रेडिट है) है। मैं एक BST जो शब्द है कि लाइनें (कहीं और संग्रहीत) शब्द हों, को इंगित का एक सूचकांक है मिल गया है। (|) मैं s-भाव का उपयोग करके खोज के लिए एक रास्ता लागू करने के लिए तो मैं जोड़ सकते हैं और (&) और या की जरूरत है।

आदेश पर एक उपयोगकर्ता की तरह कुछ टाइप कर सकते हैं का संकेत:

QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))

अनिवार्य रूप से है कि सभी लाइनों कि शब्द आग, जंगल और पानी के साथ ही सभी लाइनों कि सागर, नाव और पानी शामिल होते हैं लौटना चाहिए।

क्या मैं सच में साथ मदद की जरूरत है पार्स करने और डालने नोड्स के लिए तर्क पेड़ में ठीक से अभिव्यक्ति वास्तविक कोड की तुलना में अधिक प्रतिनिधित्व करने के लिए है। केवल एक चीज मुझे लगता है कि बाहर काम किया है मुझे अभिव्यक्ति में प्रत्येक शब्द के लिए लाइनों का एक सेट लौटने के लिए समझ में आता है। तब के आधार पर करता है, तो यह एक या या और आपरेशन मैं एक संघ या चौराहे प्रकार आपरेशन उन सेट पर एक नया सेट बना सकते हैं और उस पर पारित पेड़ अप करने के लिए प्रदर्शन करेंगे है।

मैं एक तरह से कैसे लाइन है कि अभिव्यक्ति शामिल पार्स करने के लिए पर खो रहा हूँ। के बाद कुछ सोचा था कि यह प्रतीत होता है कि उप-भाव से एक बाहर आगे उच्च यह मेरे रों अभिव्यक्ति पेड़ में होना चाहिए है? मुझे लगता है कि अगर मैं बस के रूप में अब तक पार्स के रूप में सही दिशा में एक धक्का मिल सकता है और पेड़ में भाव डालने मैं ठीक होना चाहिए।

मेरे नमूना पेड़ है कि मैं के लिए क्वेरी ऊपर तरह दिखता है के साथ आया था;

                                            &
                                         /     \
                                       |       water
                                   /      \
                                 &          &
                               /   \        /   \
                            fire  forest  ocean boat

यह समझ में आग लाइनों है कि सभी आग और वन शामिल लाइनों है कि सभी वन शामिल का एक सेट वापस होगा का एक सेट वापस होगा के रूप में आता है। फिर से और स्तर मैं उन दो सेट लेने के लिए और एक और सेट है कि केवल लाइनों है कि दोनों सेट इस प्रकार मुझे एक सेट केवल लाइनों जो दोनों आग और वन शामिल है कि देने में थे निहित पैदा करेगा।

मेरे अन्य ठोकर ब्लॉक के बाद मैं पार्स की बाधा को दूर करने के लिए कैसे पेड़ में सब कुछ का प्रतिनिधित्व करने के लिए है। मैं एक ExpTreeNode वर्ग है कि मेरे ExpTree (बीएसटी) के लिए नोड्स के रूप में काम करेगा और फिर मैं 2 उपवर्गों, ऑपरेटर और संकार्य है, लेकिन मुझे यकीन है कि अगर यह एक अच्छा तरीका है नहीं कर रहा हूँ।

13/04/2011 को 18:11
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
4

डिज्कस्ट्रा पहले से ही आप के लिए यह किया है :-)

: Shunting यार्ड एल्गोरिथ्म का प्रयास करें http://en.wikipedia.org/wiki/Shunting-yard_algorithm

आप shunting यार्ड कलन विधि का उपयोग आरपीएन (पॉलिश अंकन रिवर्स) बना सकते हैं, और एक बार है कि बनाई गई है, तो आप एक पास कर सकते हैं के माध्यम से यह द्विआधारी पेड़ बनाने के लिए।

आम तौर पर, आरपीएन मूल्यांकन करने के लिए प्रयोग किया जाता है, लेकिन आप वास्तव में एक पेड़ बना सकते हैं।

उदाहरण के लिए, बजाय का मूल्यांकन करने की है, तो आप पेड़ नोड्स बनाने और उन्हें ढेर में पुश।

तो अगर आप देख node1, node2, ऑपरेटर। आप एक नया नोड बनाने

   Operator
   /     \
  node1   node2

और इसे वापस धक्का ढेर पर।

एक अधिक विस्तृत उदाहरण:

कहो अभिव्यक्ति है (apples AND oranges) OR kiwis

इस के लिए आरपीएन है kiwis oranges apples AND OR

अब इस चलना, जबकि एक ढेर को बनाए रखने।

कीवी से बाहर एक नोड ढेर में पुश करें। संतरे से बाहर नोड ढेर में पुश। सेब के साथ एक ही।

तो ढेर है

Node:Apples
Node:Oranges
Node:Kiwis

अब आप और देखो आरपीएन में।

आप ढेर से शीर्ष दो पॉप और साथ और माता पिता के रूप में एक नया नोड पैदा करते हैं।

नोड: और, [नोड: सेब, नोड: संतरे]

मूल रूप से पेड़

       AND
     /    \
  Apples  Oranges

अब ढेर पर इस नोड धक्का।

तो ढेर है

Node:AND, [Node:Apples, Node:Oranges]
Node:Kiwis

बच्चों पेड़ हो रही के रूप में नोड कीवी और और: अब आप या देखना आरपीएन में और साथ या माता पिता और नोड के रूप में एक नोड बनाने

           OR 
         /   \
       AND   Kiwis
     /    \
  Apples  Oranges

तुम भी पेड़ बनाने के लिए shunting यार्ड एल्गोरिथ्म संशोधित करने में सक्षम हो सकता है, लेकिन आरपीएन के साथ काम आसान लगता है।

वैकल्पिक रूप से, आप रिकर्सिव वंश पार्सिंग तकनीक का उपयोग कर सकते हैं। क्या आप से पूछना बहुत आम है और यदि आप वेब पर खोज भी व्याकरण और कोड को खोजने के लिए, सक्षम हो जाएगा।

वैसे, अगर आप अभी द्विआधारी पेड़ सही मतलब है? BST (बाइनरी खोजें ट्री) एक अतिरिक्त बाधा है ...

13/04/2011 को 18:14
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more