2010-04-01 9 views
10

मैं सी ++ में एक अभिव्यक्ति का मूल्यांकन करना चाहता हूं। इसका मूल्यांकन करने के लिए, मैं अभिव्यक्ति को उपसर्ग प्रारूप में परिवर्तित करना चाहता हूं।सी ++ इंफिक्स लॉजिकल स्थितियों के लिए उपसर्ग रूपांतरण के लिए

यहाँ एक उदाहरण

wstring expression = "Feature1 And Feature2"; 

यहाँ संभव तरीके हैं।

expression = "Feature1 And (Feature2 Or Feature3)"; 

expression = "Not Feature1 Or Feature3"; 

यहाँ और, या, नहीं आरक्षित हैं शब्द और कोष्ठक ("(", )) क्षेत्र के लिए उपयोग किया जाता है

नहीं उच्च पूर्वता

है

और एस है एट अगले पूर्वता

या के बगल में पूर्वता और

सफेद स्थान सीमांकक के लिए इस्तेमाल करने के लिए सेट कर दिया जाता नहीं है। अभिव्यक्ति टैब, NEWLINE

तरह कोई अन्य तत्वों मैं क्या नहीं जरूरत अंकगणित भाव है। मैं मूल्यांकन कर सकता हूं लेकिन क्या कोई स्ट्रिंग को उपसर्ग नोटेशन में बदलने में मेरी मदद कर सकता है?

+0

सम्मेलन टैब और NEWLINE तक खाली स्थान के के प्रकार हैं कन्वर्ट करने के लिए है। क्या आप वास्तव में स्पेस चरित्र का मतलब था? कृपया उस जानकारी के साथ अपने प्रश्न को स्पष्ट करें। –

+0

इन्फिक्स को उपसर्ग में कनवर्ट करना एक साफ गृहकार्य असाइनमेंट है, लेकिन असली दुनिया में बेकार है।विकल्प: (ए) पार्स इंफिक्स और जाएं (बी) पार्स इंफिक्स, उपसर्ग में अनुवाद, उपसर्ग का उत्पादन, पार्स उपसर्ग, जाओ। यहां तक ​​कि अगर उपसर्ग को पार्स करना आसान है, तो _conversion_ प्रक्रिया धीमी है। –

उत्तर

-1

लेक्स/वाईएसी जोड़ी जैसे पार्सर जनरेटर का उपयोग करें।

+0

मैं लेक्स/वाईएसी प्रकार के पार्सर्स से ज्यादा डरता हूं। मुझे पता था कि वे मौजूद हैं लेकिन मुझे नहीं पता कि उन्हें कुशलता से कैसे उपयोग किया जाए। –

3

आपको व्याकरण को आगे बनाने की आवश्यकता होगी। तो हाथ से सभी पार्सिंग क्यों करें। इसके बजाय Boost-Spirit जैसे पार्सर बिल्डर लाइब्रेरी का उपयोग करें। या लेक्स/yacc या फ्लेक्स/बाइसन।

फिर पार्सर बिल्डर द्वारा उत्पन्न AST का उपयोग डेटा को आउटपुट करने के लिए किसी भी तरीके से आउटपुट करने के लिए करें। जैसे उपसर्ग या पोस्टफिक्स के लिए infix, ... आदि।

1

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

सबसे पहले आपको तारों के साथ काम करने की आवश्यकता नहीं है। 1. बदल "फ़ीचर 1" कहने के लिए एक आईडी (एक पूर्णांक जो एक सुविधा का प्रतिनिधित्व करता है)

तो, बयान "Feature1 And (Feature2 Or Feature3)";(1 & (2 | 3) यहाँ से कहने के लिए ... आप रूपांतरण उपसर्ग के लिए मानक इन्फ़िक्स का उपयोग करें और मूल्यांकन कर सकते हैं वें उपसर्ग नोटेशन।

यहाँ एल्गोरिथ्म उपसर्ग को इन्फ़िक्स http://www.c4swimmers.esmartguy.com/in2pre.htm http://www.programmersheaven.com/2/Art_Expressions_p1

+1

किसी शर्त का मूल्यांकन करने के लिए, आपको पाठ को पार्स करना होगा ... इसलिए किसी प्रकार का पार्सर आवश्यक है ... इसके अतिरिक्त इंफिक्स से उपसर्ग में रूपांतरण को पार्सिंग की आवश्यकता होती है क्योंकि किसी को एसोसिएटिविटी नियमों और ऑपरेटरों की प्राथमिकता को टीआई करने के लिए अवश्य पता होना चाहिए सही ढंग से ... –

+1

मुझे लगता है कि हमें पार्सिंग की आवश्यकता नहीं है। मैंने कहा कि हमें लेक्स/वाईएसी जैसे पूर्ण पार्सर की आवश्यकता नहीं है। इसका उपयोग करके रूपांतरण उपसर्ग करने के लिए एक इंफिक्स करना एक मजाक है। यानी हमें इस मामले में एएसटी बनाने की जरूरत नहीं है। – SysAdmin

संबंधित मुद्दे