वाक्य रचना और शब्दार्थ के बीच क्या अंतर है?


87

मैंने हमेशा सोचा है कि किसी भाषा के वाक्य-विन्यास का जिक्र उसी तरह होता है जैसे किसी भाषा के शब्दार्थ का। लेकिन मुझे बताया गया है कि जाहिरा तौर पर ऐसा नहीं है। क्या फर्क पड़ता है?



6
"बेरंग हरे रंग के विचारों को उग्र रूप से सोते हैं" वाक्यात्मक रूप से ठीक है, लेकिन कोई अर्थपूर्ण अर्थ नहीं देता है। En.wikipedia.org/wiki/Colorless_green_ideas_sleep_furiously
CesarGon

इस सवाल को पूछने के लिए +1। मैंने वही सोचा, इसके लिए इंटरनेट पर खोज करने के लिए बहुत आलसी था, और स्पष्ट रूप से कभी नहीं पूछा।
केके

कम या ज्यादा, मैं कहूँगा ... शब्दार्थ उदाहरण के प्रकार हैं, अन्य उदाहरणों और गारंटी के साथ उनके रिश्ते जो उनके बीच मौजूद हैं। सिंटेक्स पात्रों के तार के माध्यम से इन चीजों को घोषित करने का तरीका है। ज्यादा या कम।
देहबोप

जवाबों:


106

शब्दार्थ ~ अर्थ

सिंटेक्स ~ प्रतीकात्मक प्रतिनिधित्व

इसलिए विभिन्न भाषाओं में लिखे गए दो कार्यक्रम एक ही काम कर सकते हैं (शब्दार्थ) लेकिन कार्यक्रम लिखने के लिए इस्तेमाल किए जाने वाले प्रतीक अलग (वाक्यविन्यास) होंगे।

एक कंपाइलर आपके लिए आपके सिंटैक्स की जाँच करेगा (कम्पाइल-टाइम एरर), और शब्द नियमों को व्युत्पन्न करता है (सिंटैक्स को मशीन निर्देशों को मैप करते हुए), लेकिन सभी सिमेंटिक एरर्स (रन-टाइम एरर्स) नहीं मिलेंगे, जैसे कि गलत परिणाम क्योंकि कोड कहता है कि ऐड 2 के बजाय 1 जोड़ें)।


2
सिंटैक्स और शब्दार्थ के बीच अंतर करने के लिए त्रुटि जाँच एक मानदंड नहीं है। एक कंपाइलर दोनों वाक्यविन्यास त्रुटियों (जैसे एक लापता अर्धविराम) और सिमेंटिक त्रुटियों (जैसे x + yकि +उन ऑपरेंड के लिए कोई उपयुक्त ऑपरेटर नहीं है ) का निदान करना चाहिए । 2 के बजाय 1 जोड़ना मैं एक तार्किक त्रुटि कहूंगा ।
कीथ थॉम्पसन

3
@ कीथ - लेकिन तर्क ("तार्किक त्रुटि" के रूप में) शब्दार्थ है। संकलक द्वारा कुछ शब्दार्थिक जाँच की जा सकती है - विशेष रूप से जाँच - तो मैं मानता हूँ कि संकलक केवल वाक्यविन्यास त्रुटियां नहीं पाते हैं, लेकिन क्रिस ने केवल यह कहा कि " सभी अर्थगत त्रुटियाँ नहीं ढूंढेंगे", जिसका अर्थ यह नहीं है "। लगता है किसी भी "।
स्टीव 314

1
@ स्टीव ३१४: सहमत। लेकिन अगर आप त्रुटियों के बीच एक तेज अंतर बनाना चाहते हैं, तो एक संकलक का पता लगाना चाहिए और त्रुटियों का पता लगाने की आवश्यकता नहीं है, तो मुझे लगता है कि "अर्थ" बनाम "तार्किक" उस अंतर को व्यक्त करने का एक अच्छा तरीका है।
कीथ थॉम्पसन

4
@KeithThompson वास्तव में, सिद्धांत रूप में, पर्याप्त रूप से मजबूत और शक्तिशाली (यानी, आश्रित ) प्रकार की भाषा वाली भाषा के लिए एक संकलक या दुभाषिया, आपके कोड की किसी भी मनमानी संपत्ति की जाँच कर सकता है (यदि लागू हो तो समस्या हल करना, इसलिए शब्दार्थ त्रुटियों को तोड़ना "चेकेबल" और "अनियंत्रित" वास्तव में सामान्य रूप से समझ में नहीं आता है।
पथरियन की लौ

@ Ptharien'sFlame मैं सिर्फ एक बार के लिए बाद में इस चर्चा को अपने सिद्धांत के 'हिस्से' को उजागर करके बादलों से बाहर खींचने जा रहा हूं। व्यवहार में, कोड में शब्दार्थ को लागू करने के लिए अतिरिक्त सिंटैक्स की आवश्यकता होती है ताकि कंपाइलरों को कार्यक्षमता के रूप में संकेत दिया जा सके। अतिरिक्त शब्दार्थ जाँच एक लागत (यानी जटिलता / पठनीयता) के रूप में आती है। यह कहना कि एक भाषा सभी शब्दार्थ त्रुटियों की जांच करने के लिए पर्याप्त शक्तिशाली हो सकती है, यह कहने जैसा है कि सभी अपराधों को रोकने के लिए एक कानूनी प्रणाली पर्याप्त हो सकती है। व्यक्तिगत रूप से, मैं सुरक्षा पर स्वतंत्रता को प्राथमिकता देता हूं, लेकिन यही इसे 'धार्मिक' विषय बनाता है।
इवान प्लाइस

35

वास्तव में दो स्तर नहीं बल्कि तीन हैं:

  • शाब्दिक स्तर: भाषा तत्वों के निर्माण के लिए वर्णों को कैसे संयोजित किया जाता है ( iऔर fउत्पन्न करता है if)
  • वाक्य-स्तर: कैसे भाषा तत्वों भाषा भाव का निर्माण करने के लिए संयुक्त (कर रहे हैं if, (, 42, ==, answerऔर )एक सशर्त बयान का उत्पादन)
  • सिमेंटिक स्तर: एक अर्थ बनाने के लिए सीपीयू निर्देशों में भाषा के भाव कैसे परिवर्तित होते हैं (एक सशर्त विवरण बूलियन अभिव्यक्ति के परिणाम के आधार पर एक शाखा या दूसरे को निष्पादित करने की अनुमति देता है)

10
लेक्सिंग और पार्सिंग चरणों के बीच एक अलगाव पूरी तरह से कृत्रिम है, यह एक अनुकूलन से ज्यादा कुछ नहीं है। और कुछ ऐसी भाषाएं हैं जहां लेक्समेस का कोई परिमित फ्लैट सेट परिभाषित नहीं किया गया है - लेकिन फिर भी, एक स्पष्ट रूप से परिभाषित सिंटैक्स है। इसलिए, मैं एक सिंटैक्स के हिस्से के रूप में lexemes को परिभाषित करना पसंद करूंगा, यह एक अलग इकाई नहीं है।
तर्क

@ एसके-तर्क: कई भाषाओं में, एक चर नाम बनाने वाली अधिकृत या निषिद्ध लेक्सेम की सूची निर्दिष्ट है। तो अलगाव समझ में आता है।
मौविसील

5
@mouviciel, यह केवल एक अनुकूलन के रूप में समझ में आता है - अन्यथा आपके पास बस एक ValidIdentifierटर्मिनल होगा, जिसे कुछ इस तरह से परिभाषित किया जा सकता है ![AnyKeyword] [Identifier](मैं यहां PEG की तरह संकेतन का उपयोग कर रहा हूं)। आपको ऐसी भाषा के लिए अलग लेक्सिंग पास की आवश्यकता नहीं है। उदाहरण के लिए, GLR- आधारित C ​​++ पार्सर देखें।
एसके-तर्क

2
@EvanPlaice, आप किस बारे में बात कर रहे हैं? मेरा कहना है कि लेक्सिंग आवश्यक नहीं है (और वास्तव में आपकी भाषा को सीमित करता है), पार्सिंग नहीं ।
SK-लॉजिक

1
@ एसके-तर्क मुझे लगता है कि आपने जो इरादा किया था उसके विपरीत का मतलब जानने के लिए मैंने आपकी टिप्पणी पढ़ी। मुझे लगा कि आप ऐसे मामलों के बारे में बात कर रहे हैं जहाँ केवल एक लेसर की जरूरत है - जैसे विशुद्ध रूप से 'नियमित' या 'संदर्भ-मुक्त' भाषाओं में। उच्च स्तर की भाषाओं में एक लेक्सर आवश्यक नहीं हो सकता है, लेकिन यह एकल पास वाक्यविन्यास सत्यापन को चलाने का एक त्वरित तरीका प्रदान करता है। मैं पूरी तरह से सहमत हूं कि ऐसे कई मामले हैं जहां लेक्सर चरण को बंद या पूरी तरह से समाप्त करना फायदेमंद होगा।
इवान प्लाइस

18

मैं इसे भाषा में एक सरल उदाहरण के साथ आपको समझाऊंगा ENGLISH:

The glass drank Ben

एक वाक्यात्मक रूप से सही कथन है। इसकी एक संज्ञा है, एक क्रिया, आदि।

लेकिन शब्दार्थ यह गलत है, क्योंकि इस कथन का कोई बोधगम्य या सही अर्थ नहीं है।


15

शब्दार्थ एक प्रोग्रामिंग भाषा की तार्किक संस्थाओं और उनकी बातचीत का वर्णन करते हैं। सिंटेक्स परिभाषित करता है कि ये पात्रों में कैसे व्यक्त किए जाते हैं।

उदाहरण के लिए, सूचक अंकगणितीय की अवधारणा सी के शब्दार्थ का हिस्सा है; जिस तरह से +और -ऑपरेटर्स को पॉइंटर ऑपरेशन को व्यक्त करने के लिए इस्तेमाल किया जा सकता है, वह इसके सिंटैक्स का हिस्सा है।

कभी-कभी, दो भाषाएं उनके शब्दार्थ का हिस्सा साझा करती हैं, लेकिन वाक्यविन्यास अलग-अलग होता है (उदाहरण C # और VB.NET - दोनों मूल्य प्रकार और संदर्भ प्रकारों का उपयोग करते हैं, लेकिन आप जिन वर्णों को परिभाषित करने के लिए टाइप करते हैं वे अलग हैं); अन्य मामलों में, दो भाषाएं समान रूप से समान हैं, लेकिन शब्दार्थ मेल नहीं खाते (जावा बनाम जावास्क्रिप्ट पर विचार करें, जहां समानताएं शुरुआती को भ्रमित करती हैं)।


तो, "प्रतिमान" शब्दार्थ से संबंधित हैं? मेरा मतलब है कि एक प्रतिमान अंतरसंबंधित शब्दार्थ का एक समूह है?
गुलशन

1
@ गुलशन, प्रतिमान शब्दार्थ के रूप में इस तरह की औपचारिकता से कहीं अधिक व्यापक अवधारणा है। प्रतिमान में शब्दार्थ शामिल हो सकते हैं, लेकिन यह एक पद्धति है, या, यहां तक ​​कि व्यापक, एक दर्शन।
तर्क

6

सिंटेक्स यह है कि आप किसी भाषा के टोकन की व्यवस्था कैसे करते हैं। शब्दार्थ वह है जो उन टोकन का मतलब है (आमतौर पर, टोकन की एक विशेष व्यवस्था का मतलब है)।


5

आपने यह निर्दिष्ट नहीं किया कि आप केवल प्रोग्रामिंग भाषाओं या प्रोग्रामिंग में प्रयुक्त सामान्य भाषाओं का उल्लेख करते हैं, इसलिए मेरा उत्तर डेटा भाषाओं (जैसे XML, RDF, डेटा प्रकार सिस्टम आदि) के बारे में है:

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

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

एक उदाहरण देने के लिए:

  • XML सिंटैक्स (इन सभी कोष्ठक के साथ सामान) सिमेंटैक्स एक XML Infoset (एक अमूर्त वृक्ष) शब्दार्थ के रूप में है।
  • सिंटैक्स के रूप में एक XML Infoset कुछ XML डेटा प्रारूप में एक रिकॉर्ड को अर्थ के रूप में व्यक्त कर सकता है, उदाहरण के लिए RDF / XML दस्तावेज़ जो RDF ग्राफ़ को एन्कोड करता है।
  • सिंटैक्स के रूप में एक आरडीएफ ग्राफ (यूआरआई संदर्भ के साथ सामान) सार संसाधनों के ग्राफ को शब्दार्थ के रूप में बताता है।
  • सिंटैक्स के रूप में अमूर्त संसाधनों का एक ग्राफ एक वैचारिक मॉडल को सिमेंटिक के रूप में एन्कोड करता है।

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


4

यदि इसे बीएनएफ (बैकस-नौर फॉर्म) या कुछ इसी तरह से वर्णित किया जा सकता है , तो यह वाक्यविन्यास है। यदि ऐसा नहीं हो सकता, तो यह नहीं है।

दूसरी ओर, शब्दार्थ एक कार्यक्रम के अर्थ (या स्रोत कोड के अन्य हिस्सा) के बारे में है।

और कभी-कभी दोनों के बीच की रेखा धुंधली हो सकती है।

भेद को समझने का एक तरीका यह है कि आपके प्रोग्राम के सिंटैक्स या शब्दार्थ गलत होने पर आपको किस प्रकार की त्रुटियां देखने को मिलती हैं।

एक वाक्यविन्यास त्रुटि भाषा के व्याकरण से मेल करने के लिए स्रोत कोड की विफलता है, उदाहरण के लिए, अर्धविराम नहीं होना जहां किसी की आवश्यकता होती है।

एक शब्दार्थ त्रुटि अन्य भाषा आवश्यकताओं (जो C, उदाहरण के लिए, "अड़चन" कहता है) को संतुष्ट करने में विफलता है; एक उदाहरण लेखन हो सकता है x + yजहां xऔर yअसंगत प्रकार के होते हैं। भाषा व्याकरण आपको बताता है कि एक जोड़ जैसा दिखता है something + something, लेकिन यह इतना शक्तिशाली नहीं है कि वह बाएं और दाएं ऑपरेंड के प्रकारों पर आवश्यकताओं को व्यक्त कर सके।

(तार्किक त्रुटियां, जैसे 1 का उपयोग करना जहां 2 सही होगा, आमतौर पर संकलक द्वारा पता लगाने योग्य नहीं होते हैं - हालांकि कुछ मामलों में एक संकलक संदिग्ध कोड के बारे में चेतावनी दे सकता है।)


0

सिंटेक्स वह है जो (लेक्सिकल) प्रतीक कहते हैं। शब्दार्थ का अर्थ है।

विचार करें:

C #: condition ? true_value : false_value
VB.NET: If(condition, true_value, false_value)
- विभिन्न वाक्यविन्यास, एक ही शब्दार्थ।

C #: left_value / right_value
VB.NET: left_value / right_value
- समान वाक्यविन्यास, विभिन्न शब्दार्थ (पूर्णांक के लिए)।


0

वाक्यविन्यास शब्दों की व्याकरणिक व्यवस्था है एक वाक्य में शब्द क्रम।

(अंग्रेजी) ' कैट डॉग ब्वॉय ' और (प्रोग्रामिंग) ' हाय.5 ' वाक्य-रचना सही नहीं है।

(अंग्रेजी) ' कैट हग्स बॉय ' और (प्रोग्रामिंग) '* 3.2 * 5 *' वाक्यगत रूप से मान्य है।

स्टेटिक शब्दार्थ विज्ञान है कि क्या वाक्यात्मक रूप से मान्य बयानों का कोई अर्थ है।

(अंग्रेजी) ' I are big ' (प्रोग्रामिंग) (python) ' 3 +' hi ' वाक्यगत रूप से सही है लेकिन इसमें स्थैतिक शब्दार्थ त्रुटि है।

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

(अंग्रेजी) ' फ्लाइंग प्लेन खतरनाक हो सकते हैं' के दो अर्थ हो सकते हैं अर्थात विमानों का उड़ना खतरनाक हो सकता है या जो विमान उड़ रहे हैं वे खतरनाक हो सकते हैं।

(प्रोग्रामिंग) 'कंप्यूटर कोई त्रुटि संदेश उत्पन्न नहीं करेगा, लेकिन यह वह नहीं करेगा जो आपने इसे करने के लिए कहा था; यह कुछ और करेगा। '

स्रोत : एमआईटी 6.00.1


-2
  1. सिंटैक्स एक भाषा में मान्य बयानों के निर्माण को नियंत्रित करने वाले औपचारिक नियमों को संदर्भित करता है। शब्दार्थ से तात्पर्य नियमों के समुच्चय से है जो कथन का अर्थ देता है।

  2. एक प्रोग्राम में सिंटैक्स के कारण त्रुटियां होती हैं जब प्रोग्रामिंग भाषा के रूबल का उल्लंघन या दुरुपयोग होता है। किसी कार्यक्रम में शब्दार्थ के कारण त्रुटियां तब होती हैं जब कथन सार्थक नहीं होते हैं।

  3. शब्द आदेश वाक्यविन्यास का मूल प्रमुख है, जो समझने की कोशिश कर रहे हैं कि वाक्य संरचना और अर्थ देने में मदद करने के लिए शब्द क्रम के वाक्यविन्यास cues का उपयोग करें। शब्दार्थ एक व्यक्ति के पूर्व ज्ञान के आधार पर एक "वाक्य" के अर्थ की अपनी व्याख्या है। इसलिए एक वाक्य जो प्रतीत होता है कि कोई वाक्यात्मक अर्थ नहीं है, शब्दार्थ cues का उपयोग करते समय इसका अर्थ हो सकता है।

  4. सिंटैक्स का संबंध केवल भाषाई और व्याकरणिक रूप से सही है। शब्दार्थ सभी को पूर्व ज्ञान की आवश्यकता होती है, और जो भाषा विशिष्ट है, उससे कहीं आगे है।

  5. वाक्य "बेबी मिल्क ड्रिंक्स" का वाक्य-विन्यास अर्थ नहीं है, लेकिन शब्दार्थ के माध्यम से अधिकांश लोग इसका अर्थ "बेबी ड्रिंक दूध" के रूप में व्याख्या करेंगे, जैसा कि हमारा पूर्व ज्ञान हमें बताता है कि एक बच्चा दूध पीता है, और इसलिए हम एक अर्थ ढूंढ सकते हैं प्रमुख शब्द।


1
पिछले एक (5 बिंदु) को छोड़कर सब कुछ के लिए Upvote
nawfal

-2

सिंटेक्स और शब्दों की तरह है रणनीति और रणनीति या छोड़ दिया और सही

वे वास्तव में स्वतंत्र सार्वभौमिक अवधारणाएं नहीं हैं, लेकिन संबंधित शब्दों की एक जोड़ी है, जब आप किसी विशेष संदर्भ में होते हैं, तो विपरीत दिशाओं को इंगित करते हैं। लेकिन एक ही चीज़ जो एक पैमाने पर रणनीति है दूसरे पर रणनीति है।

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


4
किस तरह की गूढ़ बीएस है? बाएँ और दाएँ की तरह? रणनीति और रणनीति की तरह? शायद यिन और यांग, भगवान और शैतान, हैरी और वोल्डेमॉर्ट की तरह भी?
JensG

-3

सिंटेक्स वह है जो कंप्यूटर समझता है, शब्दार्थ वह है जो मानव समझता है।

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


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

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

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

3
@kylben, मैं खुद का विरोध नहीं कर रहा हूं, क्योंकि मैंने कभी नहीं कहा कि वाक्यविन्यास और शब्दार्थ भी जुड़े हुए हैं। और संकलक सीधे चरण के बाद सिंटैक्स के साथ कुछ भी नहीं कर रहा है - संकलक शब्दार्थ को लागू कर रहा है । स्पष्ट रूप से आपकी शब्दावली की व्याख्या गलत है। इसे स्टार्टर के लिए पढ़ें: en.wikipedia.org/wiki/Denotational_semantics
SK-logic

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

-3

"सादे सी" के साथ बहुत छोटा उदाहरण:

void main()
{
  int a = 10;
  int x = a - 1;
  int y = - 1;

  printf("x = %i", x);
  printf("y = %i", y);
    getch();
}

इस उदाहरण में, "-" टोकन के लिए सिंटैक्स एक ही है, लेकिन, इसका एक अलग अर्थ ("सिमेंटिक) है, जहां इसका उपयोग किया जाता है।

"X" असाइनमेंट में, "-" का अर्थ है "घटाव" ऑपरेशन, "y" असाइनमेंट में, "-" का अर्थ है "नकारात्मक संकेत" ऑपरेशन।


3
गलत। दो -ऑपरेटर एक ही टोकन हैं , लेकिन वे वाक्यात्मक रूप से भिन्न हैं, क्योंकि वे अलग-अलग संदर्भों में उपयोग किए जाते हैं। 0 - 1वाक्यविन्यास नियम से मेल खाता है additive-expression: additive-expression - multiplicative-expression, जबकि - 1वाक्यविन्यास नियम unary-expression: unary-operator cast-expression(संदर्भ: C99 मानक) से मेल खाता है ।
कीथ थॉम्पसन

@ कीथ थॉम्पसन: आप इस बिंदु से चूक गए। एक शब्दार्थ या वाक्यविन्यास प्रश्न है, सी मानक प्रश्न नहीं है। मानक सही है, लेकिन, मेरा जवाब एक अवधारणा को समझाने के लिए निर्देशित किया गया था, न कि, शाब्दिक रूप से अनुसरण करते हुए। यह "कैप्टन किर्क" बनाम "डॉ। स्पॉक" प्रश्न की तरह है। चीयर्स ;-)
umlcat

मैं असहमत हूं। दो -ओप्रेक्टर्स के बीच का अंतर सिंटैक्टिक है, न कि सिमेंटिक (हालांकि उनके अलग-अलग शब्दार्थ भी हैं)। सिंटैक्स भाषा व्याकरण द्वारा परिभाषित किया गया है, और दो ऑपरेटरों को व्याकरण के विभिन्न वर्गों में निर्दिष्ट किया गया है। एन 1570 ड्राफ्ट देखें, यूनरी ऑपरेटरों के लिए खंड 6.5.3 और एडिटिव ऑपरेटरों के लिए 6.5.6। (बीटीडब्लू, यदि आप एक सी उदाहरण का उपयोग करने जा रहे हैं, तो यह शायद सही void main()होना चाहिए ; होना चाहिए int main(void), और आप गायब हैं #include <stdio.h>और जो भी हेडर घोषित किया गया हैgetch
कीथ थॉम्पसन

बिंदु को स्पष्ट करने के लिए, वाक्यविन्यास केवल टोकन के अनुक्रम के बारे में नहीं है, यह इस बारे में है कि कैसे टोकन बड़े निर्माणों का निर्माण करते हैं। एक कंपाइलर में आमतौर पर एक लेक्सिकल एनालाइज़र (टोकेनाइज़र) होता है और एक पैराज़र अलग-अलग घटकों के रूप में होता है; दोनों ही वाक्य रचना से निपटते हैं।
कीथ थॉम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.