कंप्यूटरप्रोग्रामिंग

ब्रॉडकास्टर - है ... compilers के प्रकार। कन्वर्ट और प्रसारण कार्यक्रमों

कार्यक्रम है, साथ ही लोगों को एक भाषा से दूसरी करने के लिए अनुवाद करने के लिए एक दुभाषिया या अनुवादक की जरूरत है।

बुनियादी अवधारणाओं

कार्यक्रम गणना की एक भाषाई प्रतिनिधित्व है: मैं → पी → पी (i)। एक दुभाषिया एक प्रोग्राम है जो इनपुट कार्यक्रम पी और कुछ इनपुट x के लिए आपूर्ति की है है। यह कम से पी एक्स करती है: मैं (पी, x) = पी (एक्स)। तथ्य यह है केवल एक अनुवादक के लिए सभी संभव प्रोग्राम (जो औपचारिक प्रणाली में प्रतिनिधित्व किया जा सकता है) करने में सक्षम है है कि वहाँ एक बहुत ही गहन और महत्वपूर्ण खोज ट्यूरिंग है।

प्रोसेसर मशीन भाषा में कार्यक्रमों की एक दुभाषिया है। आम तौर पर भी, उच्च स्तरीय भाषाओं के लिए दुभाषिए लिखने के लिए तो वे एक रूप की व्याख्या करने में आसान है कि में अनुवाद महंगा।

अनुवादकों के कुछ प्रकार के बहुत ही अजीब नाम है:

  • कोडांतरक मशीन भाषा में विधानसभा भाषा कार्यक्रम अनुवाद करता है।
  • संकलक एक कम भाषा के लिए एक उच्च स्तरीय भाषा अनुवाद करता है।

पी → एक्स → प्र है, ∀x: - प्रसारणकर्ता एक प्रोग्राम है जो इनपुट डेटा के रूप में इस तरह से वे दोनों एक ही अर्थ विज्ञान है कि में कुछ भाषा एस में कार्यक्रम लेता है और टी कार्यक्रम उत्पादन होता है। पी (x) = क्यू (एक्स)।

अगर कुछ व्याख्या में पूरे कार्यक्रम प्रसारित, यह पहले निष्पादन के लिए या AOT संकलन एक संकलन कहा जाता है। AOT संकलक श्रृंखला में इस्तेमाल किया जा सकता, जिनमें से बाद अक्सर कोडांतरक, उदाहरण के लिए है:

स्रोत कोड संकलक → (अनुवादक) → → विधानसभा कोड कोडांतरक (संकलक) → → सीपीयू मशीन कोड (दुभाषिया)।

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

कई भाषाओं संकलन समय पर कोड निष्पादित और रनटाइम पर नए कोड को संकलित करने के लिए अनुमति देते हैं।

अनुवाद चरण

प्रसारण का विश्लेषण करने और synthesizing के कदम शामिल हैं:

स्रोत कोड विश्लेषक → → → वैचारिक प्रतिनिधित्व जनरेटर (सिंथेसाइज़र) → लक्ष्य कोड।

यह इन कारणों की वजह से है:

  • किसी भी अन्य विधि उपयुक्त नहीं है। शब्द अनुवाद बस काम नहीं करता।
  • अच्छा इंजीनियरिंग समाधान: यदि आप केवल एम + एन साधारण कार्यक्रम (polukompilyatorov) लिखने की जरूरत लक्षित एम और एन स्रोत भाषाओं बल्कि एम × एन जटिल की तुलना में के लिए अनुवादकों (अनुवादकों के कुल) लिखने के लिए चाहते हैं।

हालाँकि, व्यवहार में, एक बहुत ही कम पर्याप्त अर्थपूर्ण और पर्याप्त शक्तिशाली की एक वैचारिक दृश्य हर कल्पनीय स्रोत और लक्ष्य भाषाओं को कवर किया। कुछ इस के करीब आने के लिए सक्षम थे।

रियल compilers कई चरणों से गुजरना। जब अपनी खुद की संकलक बनाने सभी कड़ी मेहनत है कि लोगों को अभ्यावेदन और जनरेटर बनाने के लिए किया है दोहराने की जरूरत नहीं है। आप जावास्क्रिप्ट या सी में सीधे अपनी भाषा का अनुवाद करने और मौजूदा JavaScript इंजन और सी संकलक आराम करने के लिए का लाभ ले सकते हैं। तुम भी मौजूदा मध्यवर्ती प्रतिनिधित्व और उपयोग कर सकते हैं आभासी मशीनों।

रिकॉर्ड अनुवादक

स्रोत, गंतव्य और आधार: - प्रसारणकर्ता एक कार्यक्रम या हार्डवेयर को, जो तीन भाषाओं शामिल है। वे एक टी आकार में लिखा जा सकता है, नीचे दिए गए मूल बाईं, सही और लक्ष्य आधार का मौक़ा मिला।

वहाँ compilers के तीन प्रकार हैं:

  • ब्रॉडकास्टर - अगर यह मूल स्रोत भाषा से मेल खाती है samokompilyator है।
  • संकलक जो भाषा को लक्षित आधारभूत, samorezidentnym कहा जाता है।
  • और एक क्रॉस संकलक, अगर वह लक्षित बुनियादी विभिन्न भाषाओं - प्रसारणकर्ता।

यह महत्वपूर्ण क्यों है?

यहां तक कि आप कभी नहीं, क्योंकि इस उद्देश्य के लिए इस्तेमाल अवधारणा उदाहरण के लिए, व्यापक रूप से इस्तेमाल कर रहे हैं एक असली संकलक, इसके निर्माण की तकनीक का अच्छा ज्ञान बनाने यदि:

  • स्वरूपण पाठ;
  • भाषा क्वेरी डेटाबेस के लिए;
  • उन्नत कंप्यूटर वास्तुकला;
  • सामान्यीकृत अनुकूलन समस्याओं;
  • GUIs;
  • पटकथा भाषाओं;
  • नियंत्रक;
  • आभासी मशीनों;
  • मशीन अनुवाद।

इसके अलावा, यदि आप preprocessors, linkers, लोडर, डिबगर और प्रोफाइलर लिखना चाहते हैं, आप जब एक संकलक लेखन के रूप में ही चरणों से गुजरना होगा।

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

व्यापक प्रौद्योगिकी

संकलक प्रौद्योगिकी कंप्यूटर विज्ञान के कई अलग अलग क्षेत्रों को शामिल किया:

  • भाषा के औपचारिक सिद्धांत: व्याकरण, पार्स, कम्प्यूटेबिलिटी;
  • कंप्यूटर वास्तुकला:। निर्देश सेट, RISC या CISC, pipelined प्रसंस्करण कोर घड़ी चक्र, आदि;
  • प्रोग्रामिंग भाषाओं की अवधारणाओं, उदाहरण के लिए, एक दृश्य नियंत्रण, सशर्त निष्पादन, यात्रा, प्रत्यावर्तन, कार्यात्मक अपघटन, प्रतिरूपकता, समन्वयन, मेटा प्रोग्रामिंग, गुंजाइश, निरंतर उप प्रकार, टेम्पलेट्स, उत्पादन का प्रकार, प्रोटोटाइप, एनोटेशन, प्रवाह, monads, मेलबॉक्स प्रदर्शन जारी , वाइल्डकार्ड, नियमित अभिव्यक्ति, व्यवहार स्मृति, विरासत, बहुरूपता, मोड सेटिंग, और इतने पर आदि।।
  • सार भाषाओं और आभासी मशीनों;
  • एल्गोरिदम और डेटा संरचनाओं: नियमित अभिव्यक्ति, पार्स करने एल्गोरिदम, ग्राफिक्स एल्गोरिदम, गतिशील प्रोग्रामिंग, प्रशिक्षण;
  • प्रोग्रामिंग भाषाओं: वाक्य रचना, अर्थ विज्ञान (स्थिर और गतिशील), समर्थन मानदंड (संरचनात्मक, OOP, कार्यात्मक, तार्किक, ढेर, समानांतरवाद, मेटा-प्रोग्रामिंग);
  • निर्माण सॉफ्टवेयर (compilers, आम तौर पर बड़े और जटिल): स्थानीयकरण, कैशिंग, componentize, एपीआई-इंटरफेस, फिर से उपयोग, तुल्यकालन।

संकलक डिजाइन

असली अनुवादक के विकास में आने वाली समस्याओं में से कुछ:

  • स्रोत भाषा के साथ कोई समस्या। इसे संकलित करने के लिए आसान है? वहाँ एक पूर्वप्रक्रमक है? कैसे प्रकार के होते हैं? वहाँ एक पुस्तकालय है?
  • संकलक गुजरता समूहबद्ध करना: एकल या बहु-तरीका है?
  • अनुकूलन की डिग्री वांछित। कम या कोई अनुकूलन के साथ तेजी से और अशुद्ध प्रसारण कार्यक्रमों सामान्य हो सकता है। अधिक अनुकूलन संकलक धीमी हो जाएगी, लेकिन क्रम में बेहतर कोड इसके लायक हो सकता है।
  • त्रुटि का पता लगाने के लिए आवश्यक डिग्री। एक अनुवादक सिर्फ पहली त्रुटि में बंद कर सकते हैं? जब यह बंद कर देना चाहिए? संकलक त्रुटि सुधार पर भरोसा करना है या नहीं?
  • उपकरण की उपलब्धता। मूल भाषा बहुत छोटा नहीं है, तो स्कैनर और जनरेटर विश्लेषक आवश्यक हैं। वहाँ भी जनरेटर, कोड जनरेटर हैं, लेकिन वे इतना आम नहीं हैं।
  • लक्ष्य कोड का प्रकार उत्पन्न किया जा करने के लिए। शुद्ध पूरक या आभासी मशीन कोड से चुना जा। या सिर्फ एक प्रवेश भाग है कि इस तरह LLVM, RTL, या JVM के रूप में एक लोकप्रिय मध्यवर्ती प्रतिनिधित्व बनाता लिखें। या सी या JavaScript में स्रोत कोड में मूल का अनुवाद कर सकते हैं।
  • लक्ष्य कोड का प्रारूप। आप चुन सकते हैं एक विधानसभा भाषा, एक पोर्टेबल मशीन कोड, मशीन कोड स्मृति छवि।
  • पुनर्लक्ष्यीकरण। जब जनरेटर का सेट अच्छा है एक आम इनलेट भाग है। इस कारण से यह कई भागों के इनपुट के लिए एक जनरेटर के लिए सबसे अच्छा है।

संकलक वास्तुकला: घटकों

ये एक संकलक कि देशी कोड उत्पन्न करता है (यदि उत्पादन कार्यक्रम सी या एक आभासी मशीन में एक कार्यक्रम है, तुम नहीं तो कई चरणों की जरूरत है) के प्रमुख कार्यात्मक घटक हैं:

  • इनपुट कार्यक्रम (प्रवाह अंक) स्कैनर (शाब्दिक विश्लेषक) है, जो यह टोकन की एक धारा में धर्मान्तरित में खिलाया जाता है।
  • पार्सर (पार्सर) एक सार वाक्य रचना पेड़ का निर्माण।
  • सिमेंटिक विश्लेषक अर्थ जानकारी विघटित हो जाता है और त्रुटियों के लिए पेड़ नोड्स जाँच करता है। अतिरिक्त गुणों और स्थापित लिंक के साथ सार वाक्य रचना पेड़ - नतीजतन, अर्थ ग्राफ का निर्माण किया।
  • मध्यवर्ती कोड जनरेटर एक प्रवाह ग्राफ बनाता है (tuples मुख्य ब्लॉकों में बांटा गया है)।
  • मशीन-स्वतंत्र कोड अनुकूलक दोनों को स्थानीय (आधार इकाई के भीतर) और वैश्विक (सभी ब्लॉक करने के लिए) अनुकूलन मूल रूप से दिनचर्या के भीतर शेष आयोजित करता है। अनावश्यक कोड को कम करता है और गणना सरल करता है। परिणाम एक संशोधित प्रवाह ग्राफ है।
  • जेनरेटर एक सीधा प्रसारण नियंत्रण कोड में लक्ष्य कोड बुनियादी ब्लॉक बांधता है, (संभवतः अप्रभावी) एक वस्तु फ़ाइल कोडांतरक आभासी रजिस्टरों का निर्माण।
  • मशीन पर निर्भर अनुकूलक, लिंकर रजिस्टरों के बीच स्मृति आवंटित करता है और योजना बना टीमों बनाता है। यह पाइपलाइनिंग का अच्छा उपयोग के साथ इस विधानसभा में विधानसभा भाषा में रूपांतरण कार्यक्रम प्रदर्शन करती है।

इसके अलावा, त्रुटि का पता लगाने सबसिस्टम प्रबंधक और प्रतीक तालिकाओं का उपयोग।

शाब्दिक विश्लेषण (स्कैनिंग)

स्कैनर टोकन को हटाने के खाली स्थान के, टिप्पणियों और विस्तार हो रहा मैक्रो की एक धारा में स्ट्रीम स्रोत वर्ण बदल देता है।

स्कैनर्स अक्सर इस तरह किया जाए या नहीं खाते में मामले, मार्जिन, लाइन टूट जाता है और एम्बेडेड टिप्पणी लेने के लिए के रूप में समस्याओं, मुठभेड़।

त्रुटियाँ स्कैनिंग के दौरान हो सकता है कि, शाब्दिक कहा जाता है और शामिल हैं:

  • अक्षर हैं जो वर्णमाला में नहीं हैं;
  • किसी शब्द या लाइन में वर्णों की संख्या से अधिक;
  • नहीं एक बंद हस्ताक्षर या एक स्ट्रिंग शाब्दिक;
  • टिप्पणी में फ़ाइल के अंत।

पार्स (पार्स)

पार्सर एक सार वाक्य रचना पेड़ में टोकन के अनुक्रम बदल देता है। पेड़ में प्रत्येक नोड जिनमें से कई खुद को पेड़ नोड्स हैं नामित क्षेत्रों, के साथ एक वस्तु के रूप में जमा है। इस स्तर पर कोई चक्र हैं। जब आप एक पार्सर व्याकरण (एल एल या एलआर) की जटिलता के स्तर पर ध्यान देना और पता लगाएँ कि क्या ऐसे कोई नियम बहुविकल्पी हैं खोजने के लिए आवश्यक है। कुछ भाषाओं में अर्थगत विश्लेषण की आवश्यकता होती है।

इस स्तर पर त्रुटियां मिली वाक्य रचना कहा जाता है। उदाहरण के लिए:

  • k = 5 * (7 - y;
  • j = / 5;
  • 56 = एक्स * 4।

अर्थगत विश्लेषण

के दौरान अर्थगत विश्लेषण नियमों और पार्स पेड़ के सहयोगी भागों की स्वीकार्यता की जाँच करने के (अंतर्निहित प्रकार रूपांतरण के लिए आपरेशन डालने संदर्भ नाम अनुमति देता है, और इतने पर। डी) अर्थ ग्राफ बनाने के लिए।

जाहिर है, अलग-अलग भाषाओं अलग में नियमों की स्वीकार्यता का सेट। आप जावा जैसी भाषाओं को संकलित हैं, compilers मिल सकता है:

  • इसके दायरे के भीतर कई चर घोषणा;
  • इसकी घोषणा से पहले एक चर के लिए एक संदर्भ;
  • अघोषित के नाम के संदर्भ;
  • पेटेंट अधिकारों के उल्लंघन;
  • एक विधि कॉल में तर्कों की अत्यधिक या अपर्याप्त संख्या;
  • प्रकार मेल नहीं खाता।

पीढ़ी

मध्यवर्ती कोड पीढ़ी tuples से बना प्रवाह ग्राफ, बुनियादी ब्लॉकों में बांटा पैदा करता है।

कोड पीढ़ी एक असली मशीन कोड पैदा करता है। पहला कदम पर RISC मशीनों के लिए पारंपरिक compilers में, आप आभासी रजिस्टरों की एक अनंत संख्या के साथ एक कोडांतरक पैदा करते हैं। CISC-मशीनों के लिए शायद नहीं होगा।

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hi.delachieve.com. Theme powered by WordPress.