कंपाइलरों में परिचयात्मक पाठ्यक्रम का पालन करने के लिए कौन से कंप्यूटर विज्ञान विषय आवश्यक हैं? [बन्द है]


10

मैं गैर-कंप्यूटर विज्ञान स्नातक हूं और एक पेशेवर के रूप में वेब-डेवलपर (जावा, अजगर, एएस 3 आदि) के रूप में काम करता हूं। मैं अपने स्थानीय विश्वविद्यालय में प्रति सेमेस्टर 1 पाठ्यक्रम लेता हूं। मैंने आर्टिफिशियल इंटेलिजेंस (तर्क, संदर्भ मुक्त व्याकरण, CYK पार्सिंग, परिचयात्मक NLP, मार्कोव चेन, HMM आदि) को पिछले सेमेस्टर में लिया था।

मैं आने वाले सेमेस्टर में संकलक में एक परिचयात्मक पाठ्यक्रम लेने की योजना बना रहा हूं जिसमें निम्नलिखित पाठ्यक्रम शामिल हैं:

लेक्सिकल एनालिसिस, सिंटैक्स एनालिसिस, सिमेंटिक एनालिसिस, रन-टाइम एनवायरनमेंट, इंटरमीडिएट रिप्रेजेंटेशन, कोड जनरेशन, रजिस्टर अलोकेशन, इंस्ट्रक्शन सिलेक्शन और शेड्यूलिंग, लोकल और ग्लोबल कोड ऑप्टिमाइजेशन, डेटा फ्लो एनालिसिस का परिचय।

मेरा प्रश्न यह है कि, क्या कोई कंप्यूटर विज्ञान विषय है जो मुझे इस पाठ्यक्रम को लेने से पहले जानना चाहिए? यदि हाँ, तो यह बहुत अच्छा होगा यदि आप उन पाठ्यक्रमों को सूचीबद्ध कर सकें।


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

जवाबों:


8

आपको निम्नलिखित विषयों की सरल समझ होनी चाहिए:

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

वैकल्पिक, और शायद बहुत मदद करेगा:

  • ऑपरेटिंग सिस्टम डिज़ाइन (प्रक्रिया प्रबंधन, कर्नेल डिज़ाइन, सिंक्रोनाइज़ेशन, शेड्यूलिंग, ईवेंट्स, लॉक, थ्रेड्स और स्टैक बनाम ढेर)

4

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


3

आपको कंप्यूटर आर्किटेक्चर (रजिस्टरों, मेमोरी, विशेष प्रयोजन रजिस्टरों, आदि) पर कुछ बुनियादी पृष्ठभूमि की आवश्यकता है और पहले कुछ असेंबली कोड देखे हैं। यदि आपने पहले कुछ असेंबली कोड लिखे हैं, तो यह और भी बेहतर होगा, इसलिए आपको मशीन भाषा कैसे काम करती है, इसकी उचित समझ है।

पाठ्यक्रम के स्तर के आधार पर, यह उम्मीद की जा सकती है कि आप सुपरस्क्लर प्रोसेसिंग और लाइक के बारे में थोड़ा बहुत जानते हैं।


1
यह केवल सच है अगर हम मानते हैं कि प्रश्न में संकलक मशीन कोड उत्पन्न कर रहा है और किसी प्रकार का बायटेकोड नहीं है।
मेसन व्हीलर

3

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


2

आपको शायद औपचारिक मॉडल और भाषाओं पर भी कोर्स करना होगा। कुछ भी जो मूल चॉम्प्स्की पदानुक्रम को कवर करता है, वह ठीक होगा: नियमित भाषाएं + संदर्भ मुक्त भाषाएँ। ऐसा इसलिए है क्योंकि पार्सिंग की गणितीय नींव को समझना महत्वपूर्ण है ताकि आपका पार्सर साफ, परफ़ॉर्मेंट और सही हो। मुझे लगता है कि एक अच्छा संकलक वर्ग अक्सर नियमित एक्सप्रेशन और एलएएलआर / एलएल (के) पार्सर और उनके पीछे के सिद्धांत दोनों को कवर करेगा।


0

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


0

आपके यूनी पर निर्भर करता है, लेकिन सबसे पहले इन आवश्यक वस्तुओं की आवश्यकता होती है:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.