प्रोग्रामिंग भाषाओं में वाक्य रचना और शब्दार्थ के बीच क्या अंतर है?


120

प्रोग्रामिंग भाषाओं (जैसे C, C ++) में वाक्य रचना और शब्दार्थ के बीच क्या अंतर है ?


2
मैं मतदान करना चाहूंगा लेकिन कोई शोध प्रयास स्पष्ट नहीं है।
अशक्त

जवाबों:


201

सिंटेक्स भाषा की संरचना या व्याकरण के बारे में है। यह प्रश्न का उत्तर देता है: मैं एक वैध वाक्य का निर्माण कैसे करूं? सभी भाषाओं, यहां तक ​​कि अंग्रेजी और अन्य मानव (उर्फ "प्राकृतिक") भाषाओं में व्याकरण होते हैं, अर्थात्, ऐसे नियम जो परिभाषित करते हैं कि वाक्य ठीक से निर्मित है या नहीं।

यहाँ कुछ सी भाषा वाक्यविन्यास नियम हैं:

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

शब्दार्थ वाक्य के अर्थ के बारे में है । यह सवालों के जवाब देता है: क्या यह वाक्य वैध है? यदि हां, तो वाक्य का क्या अर्थ है? उदाहरण के लिए:

x++;                  // increment
foo(xyz, --b, &qrs);  // call foo

वाक्यात्मक रूप से मान्य C कथन हैं। लेकिन उनका क्या मतलब है? क्या इन बयानों को निर्देशों के निष्पादन योग्य अनुक्रम में बदलने का प्रयास करना भी मान्य है? ये प्रश्न शब्दार्थ के केंद्र में हैं।

पहले बयान में ++ ऑपरेटर पर विचार करें। सबसे पहले, क्या यह प्रयास करना भी मान्य है?

  • यदि x एक फ्लोट डेटा प्रकार है, तो इस कथन का कोई अर्थ नहीं है (C भाषा के नियमों के अनुसार) और इस प्रकार यह एक त्रुटि है भले ही कथन वाक्यगत रूप से सही हो।
  • यदि x कुछ डेटा प्रकार का एक संकेतक है , तो कथन का अर्थ पता x पर मान में "sizeof ( कुछ डेटा प्रकार ) जोड़ना और परिणाम को पता x में स्थान पर संग्रहीत करना है"।
  • यदि x एक अदिश राशि है, तो कथन का अर्थ "पता x पर एक मान जोड़ें और परिणाम को पता स्थान पर संग्रहीत करें"।

अंत में, ध्यान दें कि कुछ शब्दार्थ संकलन-समय पर निर्धारित नहीं किए जा सकते हैं और इसलिए उन्हें रन-टाइम पर मूल्यांकन किया जाना चाहिए। ++ ऑपरेटर उदाहरण में, यदि x पहले से ही अपने डेटा प्रकार के लिए अधिकतम मूल्य पर है, तो क्या होता है जब आप इसमें 1 जोड़ने की कोशिश करते हैं? एक और उदाहरण: यदि आपका प्रोग्राम एक पॉइंटर को रोकने का प्रयास करता है जिसका मूल्य NULL है?

सारांश में, वाक्यविन्यास वह अवधारणा है जो भाषा के व्याकरण के लिए वाक्य ही मान्य है या नहीं, इसकी चिंता है। शब्दार्थ का अर्थ है कि वाक्य का वैध अर्थ है या नहीं।


ठीक है। यदि xइसके डेटा के लिए अधिकतम मूल्य पर है और 1इसे जोड़ा जाता है तो यह कुछ अजीब आउटपुट ( 0) में परिणाम देता है , क्या यह शब्दार्थ त्रुटि नहीं है?
हॉक

एक वाहन में एक ओडोमीटर पर विचार करें - इसमें अंतःक्रियात्मक पहियों की एक श्रृंखला है जिसमें 0 अंक प्रत्येक 9 पर मुद्रित होते हैं। सबसे दाहिना पहिया सबसे तेज घूमता है; जब यह 9 से शून्य तक लपेटता है, तो इसके तत्काल बाएं पहिया को एक के बाद एक पहिया। जब यह पहिया 9 से 0 से आगे बढ़ता है, तो एक अपने बाएं अग्रिम से, और इसी तरह।
जेफ एन

एक डेटाटाइप एक ओडोमीटर के पहिए की तरह है: यह केवल एक निश्चित मूल्य तक पकड़ सकता है। जब अधिकतम मूल्य पहुंच जाता है, तो अगला अग्रिम पहिया शून्य पर लौटने का कारण बनता है। यह शब्दार्थ त्रुटि है या नहीं, यह भाषा के नियमों पर निर्भर करता है। इस मामले में, आपको C भाषा मानक पर वापस लौटने की आवश्यकता है। मुझे नहीं पता कि सी भाषा मानक क्या कहता है, लेकिन यहां कुछ विकल्प हैं। अतिप्रवाह: एक त्रुटि नहीं है; परिणाम शून्य है। -एक त्रुटि; संकलक एक अतिप्रवाह अपवाद उत्पन्न करना चाहिए। - संकलित; संकलक जो चाहे वह करने के लिए स्वतंत्र है।
जेफ एन

2
यदि कोई विशिष्ट उदाहरण के बारे में परवाह करता है, तो अहस्ताक्षरित अतिप्रवाह को मॉड्यूलर अंकगणित (इसलिए UINT_MAX + 1 == 0) के रूप में परिभाषित किया गया है । हस्ताक्षरित अतिप्रवाह अपरिभाषित है। आधुनिक कंपाइलर आमतौर पर होते हैं INT_MAX + 1 == INT_MIN, लेकिन ऐसे मामले हैं जिन्हें आप इस पर भरोसा नहीं कर सकते हैं (जैसेfor (i = 0; i <= N; ++i) { ... } , जहां Nहै INT_MAXअनुकूलन के आधार पर अनंत नहीं है, को देखने के blog.llvm.org/2011/05/what-every-c-programmer-should-know। html )।
डैनियल एच

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

21

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

Type token;

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


@ Talespin_Kit संरचना के बजाय अर्थ: तर्क अधिक अमूर्त है जैसे P => Q, etc या !! P = P, लेकिन जब आप शब्दार्थ जोड़ते हैं तो सूक्ष्मता हो सकती है, यदि P "खुश" है, तो "P" मैं है !! 'मी-अन-खुश नहीं'! = "मैं खुश हूँ"
डॉक्‍टरलोव

5
+1 के लिए "एक संकलक या दुभाषिया वाक्यविन्यास त्रुटियों के बारे में शिकायत कर सकता है। आपके सहकर्मी शब्दार्थ के बारे में शिकायत करेंगे।"
GeekyJ

11

विकिपीडिया का जवाब है। सिंटैक्स (प्रोग्रामिंग भाषा) और पढ़ें शब्दार्थ (कंप्यूटर विज्ञान) विकिपीज ।

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

यह भी देखें कि यदि आपने C के एक प्रकार को परिभाषित किया है, जहाँ हर कीवर्ड को उसके फ्रेंच समकक्ष में परिवर्तित किया गया है (इसलिए ifबनना si, doबनना faire, elseबनना sinonआदि आदि ...) तो आप निश्चित रूप से अपनी भाषा के सिंटैक्स को बदल देंगे, लेकिन आप ज्यादा नहीं बदलेंगे शब्दार्थ: फ्रेंच-सी में प्रोग्रामिंग करना आसान नहीं होगा!


8

शब्दार्थ का अर्थ है कि आपका कोड क्या है - आप छद्म कोड में क्या वर्णन कर सकते हैं। सिंटेक्स वास्तविक संरचना है - चर नाम से लेकर अर्ध-कॉलोन तक सब कुछ।


क्या यह विभिन्न लोगों के बीच बातचीत है? या यह सिर्फ एक पद है? मुझे नहीं मिला। उदाहरण के लिए "कोई विचार नहीं है कि निम्नलिखित का क्या मतलब है। यह अधिक गलत नहीं हो सकता है"।
डबलऑर्ट

5

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


5
  • संकलन करने के लिए आपको सही सिंटैक्स चाहिए ।
  • इसे काम करने के लिए आपको सही शब्दार्थ की आवश्यकता है ।

1

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

while (boolean_expr) statement

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


1

सिंटेक्स: यह भाषा की व्याकरणिक संरचना की बात कर रहा है .. यदि आप सी भाषा लिख ​​रहे हैं। आपको डेटा प्रकारों, टोकनों के उपयोग के लिए बहुत सावधानी बरतनी होगी [यह "प्रिंटफ ()" की तरह शाब्दिक या प्रतीक हो सकता है। यह 3 प्रिंट है, "प्रिंटफ, (,)"]। उसी तरह, आपको बहुत सावधान रहना होगा, आप फ़ंक्शन, फ़ंक्शन सिंटैक्स, फ़ंक्शन घोषणा, परिभाषा, आरंभीकरण और कॉलिंग का उपयोग कैसे करते हैं।

शब्दार्थ, यह तर्क या वाक्य या कथनों की अवधारणा से संबंधित है। यदि आप अवधारणा या तर्क से कुछ कह रहे हैं या लिख ​​रहे हैं, तो आप शब्दार्थ से गलत हैं।


1

यह समझना कि कंपाइलर कोड को कैसे देखता है

आमतौर पर, कोड का सिंटैक्स और शब्दार्थ विश्लेषण कंपाइलर के 'फ्रंटेंड' भाग में किया जाता है।

  • सिंटैक्स: कंपाइलर प्रत्येक कीवर्ड और प्रतीकों के लिए टोकन जेनरेट करता है: टोकन में कोड में जानकारी- कीवर्ड का प्रकार और उसका स्थान होता है। इन टोकनों का उपयोग करके, एक एएसटी (संक्षेप सिंटैक्स ट्री के लिए) बनाया और विश्लेषण किया जाता है। क्या संकलक वास्तव में यहाँ जाँच करता है कि क्या कोड शाब्दिक रूप से सार्थक है यानी 'कीवर्ड का अनुक्रम' भाषा के नियमों का अनुपालन करता है? जैसा कि पिछले उत्तरों में सुझाया गया है, आप इसे भाषा के व्याकरण के रूप में देख सकते हैं (कोड के अर्थ / अर्थ नहीं)। साइड नोट: इस चरण में सिंटैक्स त्रुटियां बताई गई हैं। (सिस्टम में त्रुटि प्रकार के साथ टोकन लौटाता है)

  • शब्दार्थ: अब, संकलक जाँच करेगा कि क्या आपके कोड संचालन 'समझ में आता है'। उदाहरण के लिए, यदि भाषा टाइप इंफ़ेक्शन का समर्थन करती है, तो यदि आप एक फ़्लोट को स्ट्रिंग असाइन करने का प्रयास कर रहे हैं, तो अर्ध-त्रुटि की सूचना दी जाएगी। या एक ही चर को दो बार घोषित करना। ये ऐसी त्रुटियां हैं जो 'व्याकरणिक रूप से' हैं / वाक्यविन्यास सही हैं, लेकिन ऑपरेशन के दौरान कोई मतलब नहीं है। साइड नोट: यह जांचने के लिए कि क्या एक ही चर दो बार घोषित किया गया है, संकलक एक प्रतीक तालिका का प्रबंधन करता है

तो, इन 2 फ्रंटेंड चरणों का आउटपुट एक एनोटेट एएसटी (डेटा प्रकार के साथ) और प्रतीक तालिका है।

इसे कम तकनीकी तरीके से समझना

सामान्य भाषा को ध्यान में रखते हुए हम उपयोग करते हैं; यहाँ, अंग्रेजी:

उदा। वह स्कूल जाता है। - गलत व्याकरण / वाक्यविन्यास, हालांकि वह एक सही अर्थ / शब्दार्थ बताना चाहता था।

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


संकलनकर्ता यह लिंक अधिक जानने के लिए सहायक हो सकता है
वेदांत पांचाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.