5

एक कंपाइलर (आमतौर पर) द्वारा किए गए अर्थपूर्ण विश्लेषण कैसा है?कंपाइलर्स में अर्थपूर्ण विश्लेषण

मुझे अपनी पिछली परीक्षा के दौरान इस प्रश्न का उत्तर देना पड़ा, यह प्रोफेसर के लिए पर्याप्त नहीं था।

मैंने बीएनएफ (उदाहरण के साथ) और मेरे उत्तर में सिंटैक्टिक कार्ड शामिल किए, जिसमें उन्होंने मुझसे पूछा: "क्या होता है जब कंपाइलर को int i; जैसे बयान मिलते हैं?"

+0

क्या उसने इस सामग्री को आपकी कक्षा में शामिल नहीं किया? –

+0

@IraBaxter: हाँ, लेकिन परीक्षा के दौरान उसने जो पूछा उससे सतही रूप से। (बुरा बुरा अंग्रेजी, क्षमा करें) – Overflowh

+1

यह एक "मानव मुद्दा" की तरह है जो एक "तकनीकी मुद्दा" है, कभी-कभी शिक्षकों को उम्मीद है कि वे कक्षा में जो कुछ बोलते हैं उसके लिए बहुत विशिष्ट हो ... – umlcat

उत्तर

7

अहो & उलमैन/ड्रैगन पुस्तक को ध्यान से पढ़ने का समय।

अर्थात् विश्लेषण एक संकलक की गतिविधि है यह निर्धारित करने के लिए कि विभिन्न मूल्यों के प्रकार क्या हैं, ये प्रकार अभिव्यक्तियों में कैसे इंटरैक्ट करते हैं, और क्या वे इंटरैक्शन अर्थात् उचित हैं। उदाहरण के लिए, आप यथोचित वर्ग के नाम से एक स्ट्रिंग गुणा नहीं कर सकता है, हालांकि कोई संपादक

"abc" * MyClass 

लेखन ऐसा करने के लिए करने से रोक देंगे, संकलक पहले घोषणाओं और स्कोप की पहचान करनी चाहिए, और आम तौर पर इस का परिणाम रिकॉर्ड प्रतीक तालिकाओं के एक सेट में कदम। यह बताता है कि विशिष्ट संदर्भों में विशिष्ट पहचानकर्ताओं का क्या अर्थ है। यह विभिन्न शाब्दिक स्थिरांक के प्रकार भी निर्धारित करना चाहिए; "एबीसी" 12.2e-5 से भिन्न प्रकार है।

फिर यह उन सभी स्थानों पर जाना चाहिए जहां पहचानकर्ता और शाब्दिक उपयोग किए जाते हैं, और यह सत्यापित करते हैं कि पहचानकर्ता/शाब्दिक, और गणना किए गए परिणाम, भाषा परिभाषा (जैसा कि उपर्युक्त उदाहरण में) के साथ संगत हैं।

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

+0

मुझे लगता है कि समझ में आया है।क्या आप कृपया मुझे कुछ उदाहरण दे सकते हैं? उदाहरण के लिए, जब एक कंपाइलर को किसी फ़ंक्शन में घोषणा (जैसे 'लम्बी डबल एफ;') मिलती है, तो यह एक तालिका में रखती है कि 'एफ' एक प्रतीक है, जो 8bytes पर कब्जा करता है, जिसमें फ्लोट नंबर हो सकते हैं, जिसे केवल परिभाषित किया जाता है समारोह का दायरा, और मूल्यों की उनकी सीमा? – Overflowh

+1

@unNatural: हाँ, आपके पास यह सही है। कुंजी दायरे, पहचानकर्ता, और पहचानकर्ता के * प्रकार * के बीच संबंध है। अन्य डेटा (जैसे कि फ्लोट 8 बाइट्स लेता है) को जरूरी नहीं है कि प्रतीक तालिका में होना चाहिए, क्योंकि यह तथ्य किसी भी फ्लोट वैल्यू के लिए कंपाइलर में संभव है। यह कंपाइलर के बाद के चरणों के लिए उपयोगी है, यदि यह निर्धारित कर सकता है तो यह रेंज जानकारी को कैप्चर करने के लिए उपयोगी है, और यह तर्कसंगत रूप से एक अर्थपूर्ण विश्लेषण है, लेकिन अधिकांश लोग इस चर्चा की संकीर्ण सीमा में "कंपाइलर अर्थात् विश्लेषण" के रूप में रेंज विश्लेषण के बारे में नहीं सोचते हैं । –

+0

ठीक है, यह स्पष्ट है :) अगर मैं आपकी उपलब्धता का दुरुपयोग करता हूं तो क्षमा करें, लेकिन मेरे पास एक और सवाल है। आपने जो कहा, उसके अनुसार, ऐसा लगता है कि बीएनएफ के पास अर्थपूर्ण विश्लेषण की प्रक्रिया से कोई लेना देना नहीं है। यह सही है, या मैं गलत हूँ? – Overflowh

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