जवाबों:
सिंटेक्स भाषा की संरचना या व्याकरण के बारे में है। यह प्रश्न का उत्तर देता है: मैं एक वैध वाक्य का निर्माण कैसे करूं? सभी भाषाओं, यहां तक कि अंग्रेजी और अन्य मानव (उर्फ "प्राकृतिक") भाषाओं में व्याकरण होते हैं, अर्थात्, ऐसे नियम जो परिभाषित करते हैं कि वाक्य ठीक से निर्मित है या नहीं।
यहाँ कुछ सी भाषा वाक्यविन्यास नियम हैं:
शब्दार्थ वाक्य के अर्थ के बारे में है । यह सवालों के जवाब देता है: क्या यह वाक्य वैध है? यदि हां, तो वाक्य का क्या अर्थ है? उदाहरण के लिए:
x++; // increment
foo(xyz, --b, &qrs); // call foo
वाक्यात्मक रूप से मान्य C कथन हैं। लेकिन उनका क्या मतलब है? क्या इन बयानों को निर्देशों के निष्पादन योग्य अनुक्रम में बदलने का प्रयास करना भी मान्य है? ये प्रश्न शब्दार्थ के केंद्र में हैं।
पहले बयान में ++ ऑपरेटर पर विचार करें। सबसे पहले, क्या यह प्रयास करना भी मान्य है?
अंत में, ध्यान दें कि कुछ शब्दार्थ संकलन-समय पर निर्धारित नहीं किए जा सकते हैं और इसलिए उन्हें रन-टाइम पर मूल्यांकन किया जाना चाहिए। ++ ऑपरेटर उदाहरण में, यदि x पहले से ही अपने डेटा प्रकार के लिए अधिकतम मूल्य पर है, तो क्या होता है जब आप इसमें 1 जोड़ने की कोशिश करते हैं? एक और उदाहरण: यदि आपका प्रोग्राम एक पॉइंटर को रोकने का प्रयास करता है जिसका मूल्य NULL है?
सारांश में, वाक्यविन्यास वह अवधारणा है जो भाषा के व्याकरण के लिए वाक्य ही मान्य है या नहीं, इसकी चिंता है। शब्दार्थ का अर्थ है कि वाक्य का वैध अर्थ है या नहीं।
x
इसके डेटा के लिए अधिकतम मूल्य पर है और 1
इसे जोड़ा जाता है तो यह कुछ अजीब आउटपुट ( 0
) में परिणाम देता है , क्या यह शब्दार्थ त्रुटि नहीं है?
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 )।
सिंटेक्स एक भाषा की संरचना को संदर्भित करता है, इसकी व्युत्पत्ति का पता लगाता है कि चीजों को एक साथ कैसे रखा जाता है।
उदाहरण के लिए, आपको कोड को एक प्रकार की घोषणा करके और फिर एक नाम और फिर एक अर्धविराम को क्रमबद्ध रूप से सही करने के लिए एक साथ रखने की आवश्यकता हो सकती है।
Type token;
दूसरी ओर, शब्दार्थ अर्थ के बारे में है। एक संकलक या दुभाषिया वाक्यविन्यास त्रुटियों के बारे में शिकायत कर सकता है। आपके सहकर्मी शब्दार्थ के बारे में शिकायत करेंगे।
विकिपीडिया का जवाब है। सिंटैक्स (प्रोग्रामिंग भाषा) और पढ़ें शब्दार्थ (कंप्यूटर विज्ञान) विकिपीज ।
या किसी भी संकलक या दुभाषिया के काम के बारे में सोचें । पहला कदम लेक्सिकल विश्लेषण है जहां स्ट्रिंग को लेक्सम में विभाजित करके उत्पन्न किया जाता है फिर पार्सिंग , जो कुछ का निर्माण करते हैं सार सिंटैक्स ट्री (जो सिंटैक्स का प्रतिनिधित्व करता है) का निर्माण करता है। अगले चरणों में इन एएसटी (शब्दार्थ) को बदलना या मूल्यांकन करना शामिल है।
यह भी देखें कि यदि आपने C के एक प्रकार को परिभाषित किया है, जहाँ हर कीवर्ड को उसके फ्रेंच समकक्ष में परिवर्तित किया गया है (इसलिए if
बनना si
, do
बनना faire
, else
बनना sinon
आदि आदि ...) तो आप निश्चित रूप से अपनी भाषा के सिंटैक्स को बदल देंगे, लेकिन आप ज्यादा नहीं बदलेंगे शब्दार्थ: फ्रेंच-सी में प्रोग्रामिंग करना आसान नहीं होगा!
शब्दार्थ का अर्थ है कि आपका कोड क्या है - आप छद्म कोड में क्या वर्णन कर सकते हैं। सिंटेक्स वास्तविक संरचना है - चर नाम से लेकर अर्ध-कॉलोन तक सब कुछ।
सिंटैक्स अभिव्यक्ति, कथन और कार्यक्रम इकाइयों की संरचना या रूप है लेकिन शब्दार्थ उन अभिव्यक्तियों, कथनों और कार्यक्रम इकाइयों का अर्थ है। शब्दार्थ सिंटैक्स से सीधे अनुसरण करते हैं । सिंटेक्स उस कोड की संरचना / रूप को संदर्भित करता है जिसे एक विशिष्ट प्रोग्रामिंग भाषा निर्दिष्ट करती है लेकिन शब्दार्थ प्रतीकों, वर्णों और शब्दों को निर्दिष्ट अर्थ से निपटते हैं।
वाक्य रचना एक प्रोग्रामिंग भाषा के अपने भाव, बयान, और कार्यक्रम इकाइयों के रूप है। इसका शब्दार्थ उन भावों, कथनों और कार्यक्रम इकाइयों का अर्थ है। उदाहरण के लिए, स्टेटमेंट का जावा का सिंटैक्स है
while (boolean_expr) statement
इस कथन रूप का शब्दार्थ यह है कि जब बूलियन अभिव्यक्ति का वर्तमान मूल्य सही होता है, तो एम्बेडेड कथन निष्पादित होता है। फिर प्रक्रिया को दोहराने के लिए बूलियन अभिव्यक्ति को स्पष्ट रूप से रिटर्न नियंत्रित करते हैं। यदि बूलियन अभिव्यक्ति झूठी है, तो नियंत्रण का उपयोग करते हुए बयान में स्थानांतरण करें।
सिंटेक्स: यह भाषा की व्याकरणिक संरचना की बात कर रहा है .. यदि आप सी भाषा लिख रहे हैं। आपको डेटा प्रकारों, टोकनों के उपयोग के लिए बहुत सावधानी बरतनी होगी [यह "प्रिंटफ ()" की तरह शाब्दिक या प्रतीक हो सकता है। यह 3 प्रिंट है, "प्रिंटफ, (,)"]। उसी तरह, आपको बहुत सावधान रहना होगा, आप फ़ंक्शन, फ़ंक्शन सिंटैक्स, फ़ंक्शन घोषणा, परिभाषा, आरंभीकरण और कॉलिंग का उपयोग कैसे करते हैं।
शब्दार्थ, यह तर्क या वाक्य या कथनों की अवधारणा से संबंधित है। यदि आप अवधारणा या तर्क से कुछ कह रहे हैं या लिख रहे हैं, तो आप शब्दार्थ से गलत हैं।
आमतौर पर, कोड का सिंटैक्स और शब्दार्थ विश्लेषण कंपाइलर के 'फ्रंटेंड' भाग में किया जाता है।
सिंटैक्स: कंपाइलर प्रत्येक कीवर्ड और प्रतीकों के लिए टोकन जेनरेट करता है: टोकन में कोड में जानकारी- कीवर्ड का प्रकार और उसका स्थान होता है। इन टोकनों का उपयोग करके, एक एएसटी (संक्षेप सिंटैक्स ट्री के लिए) बनाया और विश्लेषण किया जाता है। क्या संकलक वास्तव में यहाँ जाँच करता है कि क्या कोड शाब्दिक रूप से सार्थक है यानी 'कीवर्ड का अनुक्रम' भाषा के नियमों का अनुपालन करता है? जैसा कि पिछले उत्तरों में सुझाया गया है, आप इसे भाषा के व्याकरण के रूप में देख सकते हैं (कोड के अर्थ / अर्थ नहीं)। साइड नोट: इस चरण में सिंटैक्स त्रुटियां बताई गई हैं। (सिस्टम में त्रुटि प्रकार के साथ टोकन लौटाता है)
शब्दार्थ: अब, संकलक जाँच करेगा कि क्या आपके कोड संचालन 'समझ में आता है'। उदाहरण के लिए, यदि भाषा टाइप इंफ़ेक्शन का समर्थन करती है, तो यदि आप एक फ़्लोट को स्ट्रिंग असाइन करने का प्रयास कर रहे हैं, तो अर्ध-त्रुटि की सूचना दी जाएगी। या एक ही चर को दो बार घोषित करना। ये ऐसी त्रुटियां हैं जो 'व्याकरणिक रूप से' हैं / वाक्यविन्यास सही हैं, लेकिन ऑपरेशन के दौरान कोई मतलब नहीं है। साइड नोट: यह जांचने के लिए कि क्या एक ही चर दो बार घोषित किया गया है, संकलक एक प्रतीक तालिका का प्रबंधन करता है
तो, इन 2 फ्रंटेंड चरणों का आउटपुट एक एनोटेट एएसटी (डेटा प्रकार के साथ) और प्रतीक तालिका है।
सामान्य भाषा को ध्यान में रखते हुए हम उपयोग करते हैं; यहाँ, अंग्रेजी:
उदा। वह स्कूल जाता है। - गलत व्याकरण / वाक्यविन्यास, हालांकि वह एक सही अर्थ / शब्दार्थ बताना चाहता था।
उदा। वह ठंड में चला जाता है। - ठंड एक विशेषण है। अंग्रेजी में, हम कह सकते हैं कि यह व्याकरण का अनुपालन नहीं करता है, लेकिन यह वास्तव में सही सिंटैक्स के साथ गलत अर्थ के लिए निकटतम उदाहरण है जिसके बारे में मैं सोच सकता हूं।