2012-03-11 13 views
8

क्या सी ++, सी # या जावा भाषा संदर्भ-मुक्त या संदर्भ-संवेदनशील हैं?क्या आधुनिक प्रोग्रामिंग भाषाओं के व्याकरण संदर्भ-मुक्त या संदर्भ-संवेदनशील हैं?

+0

http://stackoverflow.com/questions/2929507/chomsky-hierarchy-and-programming- भाषाएं –

उत्तर

6

सी ++ न तो संदर्भ मुक्त है और न ही संदर्भ-संवेदनशील है, template system is Turing-complete के बाद से और यह निर्धारित करना कि सी ++ कोड का एक टुकड़ा कानूनी सी ++ अनिवार्य रूप से कठिन है या नहीं। उदाहरण के लिए, मैं एक टेम्पलेट क्लास को परिभाषित कर सकता हूं जो एक स्ट्रिंग पर एक टीएम अनुकरण करता है और फिर यदि मशीन स्वीकार करता है और 0 नहीं करता है तो मान 1 के साथ स्थिर बनाता है। अगर मैं ऐसा ही किया, उसके बाद निम्न कोड कानूनी होगा iff टीएम दिए गए इनपुट पर रोका:

int myArray[TMTemplate</* ... args ... */>::value]; 

के बाद से यदि टीएम को खारिज कर दिया, इस आकार 0 की एक सरणी, जिसकी अनुमति नहीं है बनाता है।

न तो सी # और न ही जावा संदर्भ-मुक्त है, क्योंकि यह जांच कर रहा है कि किसी चर के दौरान एक चर का सही ढंग से और लगातार उपयोग किया जाता है, यह संदर्भ-मुक्त नहीं है (सबूत जटिल है और Ogden's lemma पर निर्भर करता है)। हालांकि, मुझे यकीन नहीं है कि वे संदर्भ-संवेदनशील हैं या नहीं।

आशा है कि यह आपके प्रश्नों का आंशिक उत्तर देगा!

+4

मुझे यकीन नहीं है कि टेम्पलेट्स की ट्यूरिंग-पूर्णता सी ++ के व्याकरण * को प्रभावित करती है या नहीं। निश्चित रूप से, टेम्पलेट मेटाप्रोग्रामिंग के परिणाम गीलेर का निर्णय ले सकते हैं कि एक प्रोग्राम कुछ अर्थपूर्ण चेक पास करता है, लेकिन यह व्याकरण के दायरे से काफी दूर है। और टेम्पलेट्स सिंटैक्स के बारे में कुछ भी नहीं बदलते हैं: यदि प्रोग्राम में सिंटैक्स त्रुटि है, तो टेम्पलेट्स को कम नहीं किया जाता है, और यदि वे तत्काल होते हैं, तो वे कभी भी वाक्यविन्यास त्रुटियों का परिणाम नहीं देते हैं। क्या आप सभी स्थैतिक रूप से टाइप की गई भाषाओं को संदर्भ-संवेदनशील मानते हैं क्योंकि आपको गीलेर का निर्णय लेने के लिए शामिल सभी प्रकारों को जानने की आवश्यकता है। एक असाइनमेंट स्टेटमेंट वैध है? – delnan

+0

@ delnan- मैं इस सवाल की व्याख्या कर रहा था कि कोई भी स्थैतिक रूप से टाइप की गई भाषा संदर्भ-मुक्त नहीं है, क्योंकि कार्यक्रम की शुद्धता इस बात पर निर्भर करती है कि प्रकार कैसे संबंधित हैं। मैं इस दृष्टिकोण से आ रहा हूं "यदि आप कानूनी एक्स कार्यक्रमों का प्रतिनिधित्व करने वाले सभी तारों को इकट्ठा करते हैं, तो आप किस तरह की भाषा वापस लेते हैं?" यह सेट संदर्भ-मुक्त नहीं है, भले ही मान्य होने के लिए पूर्व शर्त के रूप में स्ट्रिंग व्याकरण में होनी चाहिए। क्या इसका कोई मतलब है? और क्या यह सवाल की एक अनुचित व्याख्या है? – templatetypedef

+2

उस व्याख्या के तहत, आपका उत्तर समझ में आता है। ऐसा नहीं है कि मैंने सवाल का अर्थ कैसे लिया होगा, लेकिन ऐसा इसलिए है क्योंकि मुझे लगता है कि "संदर्भ-मुक्त भाषा" (जैसा कि ओपी द्वारा उपयोग किया जाता है) "संदर्भ-मुक्त व्याकरण वाली भाषा" के लिए सिर्फ एक लघुरूप है। लेकिन मुझे लगता है कि यह समझ में आता है (और यदि वह वास्तव में सवाल था, तो आपका जवाब सही है)। आगे गलतफहमी को रोकने के लिए, आपको उत्तर में उस स्पष्टीकरण को जोड़ना चाहिए। – delnan

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