2011-08-13 13 views
5

मैं एक छोटे से सी संकलक लिखने के लिए देख रहा हूँ, और मैं कहीं भी C99 के लिए व्याकरण को खोजने के लिए प्रतीत नहीं कर सकते हैं। मुझे सी 9 0 और सी 99 मानकों का दस्तावेज मिला है, लेकिन मुझे व्याकरण कहीं भी नहीं मिल रहा है। C99 मानक मेंमुझे सी 0 9 0 और सी 99 के लिए स्पष्ट व्याकरण कहां मिल सकता है?

उत्तर

8

अनुबंध A (linked by Wikipedia के रूप में) बहुत मेरे लिए एक व्याकरण की तरह दिखता है।

जहां तक ​​मुझे याद है, कुछ पहचानकर्ताओं से टाइप किए गए टाइप किए गए नामों के साथ कुछ अतिरिक्त व्याकरण संबंधी मुद्दे हैं, जिसका मतलब है कि कोई इसे केवल yacc में नहीं खिला सकता है और इसे काम करने की उम्मीद कर सकता है, लेकिन यह सबसे अधिक आधिकारिक स्रोत है जो आपको मिलेगा ।

+0

वास्तव में वहाँ हैं। Typedef नाम प्रभावी रूप से परिभाषित किए जाने के बाद कीवर्ड बन जाते हैं, लेकिन जब वे दायरे से बाहर जाते हैं तो वे कीवर्ड होने से रोकते हैं। इसका मतलब है कि आपको प्रतीक तालिका से पार्सर में कुछ प्रकार की प्रतिक्रिया की आवश्यकता है, कुछ ऐसा (मुझे लगता है) अधिकांश अन्य भाषाओं की आवश्यकता नहीं है। सिर्फ एक उदाहरण: आप 'foo' टाइप टाइपिफ़ है या नहीं, यह जानने के बिना' sizeof (foo [10]) को पार्स नहीं कर सकते हैं। (ऐतिहासिक रूप से, इस वजह से typedefs भाषा के लिए एक अपेक्षाकृत देर से इसके अतिरिक्त थे -। पूर्व कश्मीर एंड आर, लेकिन उसके बाद प्रकार प्रणाली परिभाषित किया गया था) –

+0

... और typedef मुद्दे से निपटने के बाद भी, संभवतः-सार declarators पार्स करने _surprisingly_ है जटिल। एक स्नातक छात्र के रूप में, मैं एक अनुसंधान परियोजना के लिए एक सी पार्सर लिखा था, और के रूप में मैं यह पता लगाने की उसे सही ढंग से करते हैं प्रयास किया मैं एक और मौजूदा कार्यान्वयन मैं की खुदाई कर सकता है, उस समय जीसीसी के पार्सर सहित के हर के लिए जवाबी उदाहरण की खोज की। ऐसा नहीं है कि अब मैं किसी भी counterexamples, और न ही अन्य विवरण याद कर सकते हैं। वे बालों वाले थे। –

+0

ठीक है, मैं शापित हो जाऊंगा, अब मुझे गूंगा लगता है। व्याकरण की संदर्भ संवेदनशीलता के लिए, मैं आगे बढ़ने जा रहा हूं और अभी अनदेखा कर रहा हूं ... मैं अभी तक पूरी तरह से विशेषीकृत कंपाइलर नहीं लिख रहा हूं ... – Alex

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