it-swarm.dev

ما هو الفرق بين بناء الجملة والدلالات في لغات البرمجة؟

ما هو الفرق بين بناء الجملة و الدلالات في لغات البرمجة (مثل C ، C++)؟

84
haccks

بناء الجملة هو حول هيكل أو قواعد اللغة. إنه يجيب على السؤال: كيف يمكنني بناء جملة صالحة؟ جميع اللغات ، حتى الإنجليزية وغيرها من اللغات البشرية (ويعرف أيضًا باسم "الطبيعية") بها قواعد نحوية ، أي القواعد التي تحدد ما إذا كانت الجملة قد تم إنشاؤها أم لا.

فيما يلي بعض قواعد لغة C:

  • بيانات منفصلة مع شبه القولون
  • أرفق التعبير الشرطي لبيان IF داخل الأقواس
  • قم بتجميع عبارات متعددة في بيان واحد عن طريق وضع أقواس مجعد
  • يجب التصريح عن أنواع البيانات والمتغيرات قبل أول عبارة قابلة للتنفيذ (تم إسقاط هذه الميزة في C99. C99 والأخيرة تسمح بإعلانات النوع المختلط.)

دلالات هو حول معنى من الجملة. إنها تجيب على الأسئلة: هل هذه الجملة صالحة؟ إذا كان الأمر كذلك ، ماذا تعني الجملة؟ فمثلا:

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

هي جمل صالحة جمليا. لكن ماذا تعني؟ هل يصلح حتى محاولة تحويل هذه العبارات إلى سلسلة قابلة للتنفيذ من التعليمات؟ هذه الأسئلة هي في قلب الدلالات.

النظر في عامل التشغيل ++ في العبارة الأولى. بادئ ذي بدء ، هل هو صحيح حتى لمحاولة هذا؟

  • إذا كانت x عبارة عن نوع بيانات عائم ، فلن يكون لهذا البيان أي معنى (وفقًا لقواعد لغة C) ، وبالتالي فهو خطأ على الرغم من أن العبارة صحيحة بناءً.
  • إذا كانت x هي مؤشر إلى بعض أنواع البيانات ، فإن معنى العبارة هو "إضافة sizeof ( بعض أنواع البيانات ) إلى القيمة في العنوان x وتخزين النتيجة في الموقع على العنوان x" .
  • إذا كانت x عددية ، فإن معنى العبارة هو "إضافة واحد إلى القيمة في العنوان x وتخزين النتيجة في الموقع على العنوان x".

أخيرًا ، لاحظ أنه لا يمكن تحديد بعض الدلالات في وقت الترجمة وبالتالي يجب تقييمها في وقت التشغيل. في مثال عامل التشغيل ++ ، إذا كانت x هي بالفعل في الحد الأقصى لقيمة نوع البيانات الخاص بها ، فما الذي يحدث عند محاولة إضافة 1 إليه؟ مثال آخر: ماذا يحدث إذا حاول البرنامج إلغاء تحديد مؤشر له قيمة فارغة؟

في الملخص ، بناء الجملة هو المفهوم الذي يهم نفسه فقط سواء كانت الجملة صحيحة أم لا بالنسبة لقواعد اللغة. الدلالات تدور حول ما إذا كانت الجملة لها معنى صحيح أم لا.

158
Jeff N

يشير بناء الجملة إلى بنية اللغة ، ويتتبع أصلها إلى كيفية تجميع الأشياء معًا.
على سبيل المثال ، قد تحتاج إلى تجميع الشفرة عن طريق إعلان نوع ثم اسم ثم فاصلة منقوطة ، لتكون صحيحة في بناء الجملة.

Type token;

من ناحية أخرى ، فإن الدلالات تدور حول المعنى. مترجم أو مترجم شفوي قد يشكو من أخطاء في بناء الجملة. زملائك في العمل سوف يشكون من دلالات.

15
doctorlove

ويكيبيديا لديها الجواب. قراءة بناء جملة (لغات البرمجة) & دلالات (علوم الكمبيوتر) wikipages.

أو فكر في عمل أي مترجم أو مترجم . الخطوة الأولى هي التحليل المعجمي حيث يتم إنشاء الرموز المميزة بتقسيم السلسلة إلى lexemes ثم تحليل ، والتي تقوم ببناء بعض شجرة بناء الجملة المجردة (والتي تمثل بناء جملة). تتضمن الخطوات التالية تحويل أو تقييم هذه AST (دلالات).

لاحظ أيضًا أنه إذا قمت بتعريف متغير من C حيث تم تحويل كل كلمة رئيسية إلى ما يعادلها بالفرنسية (بحيث تصبح ifsi ، do تصبح faire ، else تصبح sinon إلخ ...) ، فبالتأكيد ستغير بناء جملة لغتك ، ولكن لن تغير الكثير من الدلالات: لن تكون البرمجة في اللغة الفرنسية- C أسهل!

8
Basile Starynkevitch

الدلالات هي ما تعنيه الشفرة - ما قد تصفه في الشفرة الزائفة. بناء الجملة هو الهيكل الفعلي - كل شيء من أسماء المتغيرات إلى شبه كولون.

6
thumbtackthief

بناء الجملة هو بنية أو شكل من أشكال التعبيرات والبيانات ووحدات البرنامج ولكن الدلالات هو معنى تلك التعبيرات والبيانات ووحدات البرنامج. الدلالات اتبع مباشرة من بناء الجملة . بناء الجملة يشير إلى بنية/شكل التعليمات البرمجية التي تحددها لغة برمجة معينة ولكن الدلالات التعامل مع المعنى المخصص للرموز والحروف والكلمات.

2
Kobina Ebo

بناء الجملة: إنه يشير إلى البنية النحوية للغة .. إذا كنت تكتب لغة c. عليك الحرص الشديد على استخدام أنواع البيانات ، الرموز المميزة [يمكن أن تكون حرفية أو رمزية مثل "printf ()". لديها 3 tokes ، "printf ، (،)"]. بنفس الطريقة ، عليك أن تكون حذراً للغاية ، وكيفية استخدام الوظيفة ، وبناء جملة الوظيفة ، وإعلان الوظيفة ، والتعريف ، والتهيئة والاتصال بها.

أثناء الدلالات ، يتعلق الأمر بالمنطق أو مفهوم الجملة أو البيانات. إذا كنت تقول أو تكتب شيئًا من المفهوم أو المنطق. ثم ، أنت خاطئ دلالة.

1
Hafiz Shehbaz Ali