वाक्य रचना और व्याकरण में क्या अंतर है?


14

मैं वाक्य रचना और शब्दार्थ के बीच का अंतर समझता हूँ -

सिंटेक्स : प्रतीकों को एक वैध अभिव्यक्ति या कथन बनाने के लिए कैसे संयोजित किया जाता है।
शब्दार्थ : उन प्रतीकों का अर्थ जो अभिव्यक्ति या कथन बनाते हैं।

लेकिन व्याकरण क्या है? उदाहरण के लिए: कभी-कभी मैं लोगों को यह कहते हुए सुनता हूं कि कुछ निर्माण "व्याकरणिक रूप से गलत है, लेकिन वाक्यात्मक रूप से यह सही है"। इसका क्या मतलब है?


एफडब्ल्यूआईडब्ल्यू, यह मुझे बकवास लगता है। यदि भाषा का व्याकरण कोड के टुकड़े को स्वीकार करता है, तो यह वाक्य रचना के अनुरूप है। शायद किसी के पास "सिंटैक्स" की बहुत व्यापक (और गैर-मानक) परिभाषा है। प्रसंग / स्रोत?

@delnan। सच नहीं। उदाहरण के लिए int;, व्याकरणिक रूप से मान्य है, लेकिन C ++ में कृत्रिम रूप से बीमार है। व्याकरण को इस कोड से कोई समस्या नहीं है, लेकिन सिंटैक्स बाधाओं की आवश्यकता है कि एक नाम प्रदान किया जाता है यदि किसी घोषणा के पहले भाग में कोई कक्षा-निर्दिष्ट या एनम-स्पेसियर नहीं है या, C ++ 11, मित्र-विनिर्देशक में है
जोहान्स शाउब -

@ जोहान्सचैब-लिटब: व्याकरण के उस हिस्से का हवाला देना जो इसे वैध बनाता है?

@Johanes यह सवाल में स्थिति का उल्टा है।
निकोल

2
@ जोहान्स शाउब: कौन सा नियम "इंट?" वैध? व्याकरण वाक्य रचना को परिभाषित करता है।
केसी पैटन

जवाबों:


6

एक व्याकरण नियमों का एक समूह है जो एक विशेष भाषा के लिए वाक्यविन्यास को परिभाषित करता है।

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

typename var_name '[' unsigned_int ']'

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


3

अंतर फजी है और बहुत ज्यादा चिंता करने लायक नहीं है।

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

इसके विपरीत, "व्याकरण" आम तौर पर संदर्भ-मुक्त भाषाओं (विशेषता व्याकरणों के बावजूद) का वर्णन करने की एक विधि को संदर्भित करता है ।

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

व्यावहारिक रूप से, जो कोई भी "वाक्य-रचना" और "व्याकरणिक" के बीच अंतर पर भरोसा करता है, उसने ऐसा बेहतर ढंग से कहा और समझा कि उनका क्या मतलब है।


मुझे समझ में नहीं आता है कि अंतर क्यों फजी है। व्याकरण वाक्य विन्यास का वर्णन करता है।
केसी पैटन

1
@ वाक्य, नहीं, शब्द "सिंटैक्स" के एक उपयोग के अनुसार, व्याकरण सिंटैक्स के एक सुपरसेट को निर्दिष्ट करता है।
रयान क्यूलपेपर

0

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

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

उदाहरण के लिए, C में व्याकरण का एक हिस्सा कुछ इस तरह दिख सकता है:

if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...

अर्थ:

an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....

एक व्याकरण को परिभाषित करने के इस तरीके पर एक नज़र डालें । यदि आप वास्तव में व्याकरण के बारे में उत्सुक हैं, तो जीएनयू बाइसन पर एक नज़र डालें , जो मूल रूप से एक भाषा के व्याकरण का वर्णन करने के लिए एक उपकरण है।

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


7
नहीं, व्याकरण शब्दार्थ को परिभाषित नहीं करता है और इसे कभी भी नहीं करना चाहिए, जब तक कि यह कुछ विदेशी न हो, जैसे संदर्भfreeart.org
तर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.