2015-11-19 6 views
5

मैं वर्तमान में सी से असेंबली कंपाइलर लिखने की प्रक्रिया में हूं, यह व्यावहारिक नहीं है, लेकिन मैं इसे शैक्षिक मूल्य के लिए करना चाहता हूं। मैं सोच रहा था कि जब मैं खोजशब्दों के लिए परीक्षण कर रहा हूं, तो फाइल में अगले शब्द को पढ़ने के बजाय और फिर खोजशब्दों के लिए परीक्षण करने वाले बयानों के जरिये इसे घोंसले के गुच्छा के माध्यम से चलाकर और अधिक कुशल तरीका है। क्या कोई बेहतर तरीका है?सी कंपाइलर लिखते समय मुझे कीवर्ड का विश्लेषण कैसे करना चाहिए?

+2

आप सही हैशिंग का प्रयास कर सकते हैं, लेकिन यह संभावना नहीं है कि यह चरण आपकी प्रदर्शन बाधा बनने जा रहा है। –

+2

मैं टैग [पार्सिंग] को [स्कैनिंग] में बदलता हूं। व्यक्तिगत टोकन की पहचान संकलक के पहले चरण, स्कैनर द्वारा की जाती है, न कि दूसरे चरण, पार्सर द्वारा। –

+0

और अब मैंने देखा है कि [स्कैनिंग] गलत टैग है। इसे [lexer] करने के लिए फिर से बदल दिया। –

उत्तर

8

आपका प्रश्न वास्तव में काफी विशिष्ट है। आप इस बारे में पूछ रहे हैं कि व्याख्यात्मक विश्लेषक को कैसे बनाया जाए, जिसे स्कैनर भी कहा जाता है, और कुशलतापूर्वक और आसानी से कीवर्ड को कैसे पहचानें। स्कैनर एक ठेठ संकलक का पहला चरण है, और यह स्रोत कोड को परिवर्तित करता है, जो कि टोकन के अनुक्रम में वर्णों का अनुक्रम है, जहां टोकन एक इकाई, एक ऑपरेटर या कीवर्ड जैसी इकाई है।

चूंकि कीवर्ड सामान्य पहचानकर्ताओं के लिए पैटर्न से मेल खाते हैं, इसलिए एक सामान्य चाल सभी कीवर्ड को प्रतीक तालिका में रखना है, साथ ही जानकारी यह है कि यह एक कीवर्ड है। फिर, जब स्कैनर को पहचानकर्ता मिल जाता है, तो यह सामान्य रूप से प्रतीक तालिका को खोजता है यह देखने के लिए कि क्या पहचानकर्ता पहले देखा गया है। यदि यह पहचानकर्ता एक क्यूवार्ड था, तो यह जानकारी मिलेगी कि यह किस कीवर्ड के बारे में है।

4

क्या आप कक्षा के हिस्से के लिए ऐसा कर रहे हैं? यदि हां, तो पार्सिंग और लेक्सिंग पर दिशानिर्देश होना चाहिए। यदि नहीं, तो आप बहुत सारे काम में हैं!

एक वास्तविक कंपाइलर लिखना सिर्फ बयानों के गुच्छा से गुजरने से कहीं अधिक जटिल है, क्योंकि आपको पर्यावरण का ट्रैक रखने की आवश्यकता है। आपको इस बारे में सोचना होगा कि आप कक्षाओं, कार्यों, फ़ंक्शन कॉल, क्लास इंस्टॉलेशन, रिकर्सिव फ़ंक्शंस को कैसे अनुमति देते हैं ... सूची चालू है।

विषय पर यूसी बर्कले से पाठ्यक्रम व्याख्यान, यानी पार्स, lexing, कोड पीढ़ी पर एक नजर डालें, और उपकरण आप की आवश्यकता होगी:

http://www-inst.eecs.berkeley.edu/~cs164/fa13/

नोट है कि विशेष रूप से इस्तेमाल किया सी में इस पाठ्यक्रम ++ असेंबली कंपाइलर को पायथन 2.5 लिखने के लिए, लेकिन व्याख्यान और रीडिंग में अवधारणाएं और कुछ टूल भाषा-प्रतिबंधित नहीं हैं।

3

कीवर्ड (सामान्य रूप से टोकन के बजाए) एक बंद सेट है, जिसके लिए टकराव मुक्त हैश फ़ंक्शन उत्पन्न करना व्यावहारिक है। चूंकि सेट छोटा है, इसलिए न्यूनतम हैश फ़ंक्शन होना आवश्यक नहीं है।

0

यदि आप कथन और strcmp() हैं तो आप इसे एक गुच्छा के साथ कर सकते हैं। हालांकि, सभी खोजशब्दों के लिए लेखन विवरण बहुत जल्दी परेशान हो जाता है। आप हैश टेबल का उपयोग करना बेहतर कर देंगे - संकलन की शुरुआत में आप टेबल में सभी कीवर्ड डालते हैं और फिर आप आवश्यकतानुसार लुकअप करते हैं। इसका दोष यह है कि यदि आपको सी का उपयोग करना है, तो आपको अपनी खुद की हैश टेबल भी लिखनी होगी (या लाइब्रेरी से एक का उपयोग करना होगा)। यदि आप सी ++ का उपयोग कर सकते हैं, तो आप एसटीएल से एक मानचित्र या एक unordered_map का उपयोग कर सकते हैं। किसी भी मामले में, यदि आप प्रदर्शन के बारे में चिंतित हैं, जैसा कि किसी और ने उल्लेख किया है, तो यह बोतल की गर्दन नहीं होगी।

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

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