نحو (حوسبة): الفرق بين النسختين

[مراجعة غير مفحوصة][نسخة منشورة]
تم حذف المحتوى تمت إضافة المحتوى
JarBot (نقاش | مساهمات)
ط بوت:تدقيق إملائي V1 (تجريبي)
الرجوع عن 4 تعديلات معلقة من Doaa-ali55 و JarBot إلى نسخة 26248304 من JarBot.
وسم: استبدل
سطر 1:
'''تركيب نحوي''' ([[لغة برمجة]]) في [[معلوماتية|علوم الحاسوب]] تعني سلسلة مجموعة من الرموز والشفرات في ال[[كود مصدري]] لغاية تركيب مصدر متجانس ومتسلسل واضح لبرمجة تعليمة ما.<ref>{{cite web|url=http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html |title=An Introduction to Common Lisp Macros |publisher=Apl.jhu.edu |date=1996-02-08 |accessdate=2013-08-17}}</ref><ref>{{cite book|last=Louden|first=Kenneth C.|title=Compiler Construction: Principles and Practice|publisher=Brooks/Cole|date=1997|isbn=981-243-694-4}}</ref><ref>[http://www.dummies.com/how-to/content/semantic-errors-in-java.html Semantic Errors in Java] {{Webarchive|url=http://web.archive.org/web/20160818190411/http://www.dummies.com:80/how-to/content/semantic-errors-in-java.html |date=18 أغسطس 2016}}</ref>
قواعد لغة البرمجة تحدد دائما لكل شفرة طريقة كتابتها لتكون وحدة كاملة صحيحة يستطيع [[مصرف (برمجة)|المصرّف (برمجة)]] و[[مصرف (برمجة)|المترجم (برمجة)]] فهمها فثم الترجمة إلى [[لغة آلة]] تفهمها [[وحدة المعالجة المركزية]].
 
[[ملف:Python add5 syntax.svg|تصغير|يسار]]
 
تحدد صيغة اللغة شكلها الخارجي. تعتمد لغات الكمبيوتر القائمة على النصوص سلسلة من الأحرف, بينما تعتمد لغات البرمجة المرئية على الربط بين الرموز .تعد المستندات غير الصالحة في بناء الجملة لها خطأ في بناء الجملة.
يتناقض بناء الجملة مع المعنى .في معالجات لغات الكمبيوتر معالجة المعنى تأتي بعد المعالجات النحوية ,لكن في بعض لحالات تكون معالجة المعنى امر ضروري لمعالجة النحوية ,ويتم ذلك بشكل متزامن .في المترجم يكون التحليل النحوي في البداية ثم يبدأ التحليل للمعنى.
 
 
 
=== مستويات بناء الجملة: ===
يتم بشكل عام تميز لغة الكمبيوتر إلى ثلاث مستويات :
* الكلمات :المستوي القاموسي ,تحديد كيفية اعطاء رمز.
* العبارات :مستوي القواعد, تحدد كيفية صياغة الرموز .
* السياق :تحدد أسماء الكائنات او المتغيرات اذا كانت صحيحة.
يؤدي التميز بهذه الطريقة إلى نمطية مما يسمح بوصف كل مستوى ومعالجته بشكل منفصل .
اولا: يقوم (laxer) بتحويل التسلسل للأحرف إلى التسلسل من الرموز المميزة .
ثانيا: يحول المحلل اللغوي التسلسل المكون من الأحرف المميزة إلى شجرة تركيبة.
ثالثأ:يحلل التحليل السياقي الأسماء جزأين:د من النوع .
 
يمكن تقسيم مرحلة التحليل نفسها إلى جزأين :شجرة التحليل أو شجرة بناء الجملة التي يتم تحديدها من خلال القواعد النحوية .
الكلمات هي في لغة عادية, محددة في القواعد القاموسي, و التي هي قواعد من النوع 3 وتكون عادة كتعبيرات عادية. محددة في قواعد تركيب الجمل وهي قواعد من النوع 2 تعطى بشكل عام كقواعد انتاج في الشكل (BNF ).
 
 
 
غالبا ما يتم تحديد قواعد النحوية في قواعد نحوية أكثر تقييدا من القواعد النحوية الكاملة الخالية من السياق , وذلك لتسهيل تحليلها .في حين أن محلل LR يمكنه تحليل أي (DCFL). فإن محلل (LALR)البسيط وحتى محلل(LL) الأبسط أكثر كفاءة ,ولكن يمكن فقط تحليل القواعد النحوية التي تكون قواعد إنتاجها مقيدة. من حيث المبدأ, يمكن وصف البنية السياقية بقواعد نحوية ملائمة للسياق , ويتم تحليلها اليا عن طريق القواعد النحوية ,على الرغم من ان هذه الخطوة تتم بشكل عام عبر قواعد تحليل الأسماء و تدقيق على النوع ,ويتم تطبيقها عبر جدول الرموز الذي يخزن فيه الأسماء والانواع لكل نطاق.
تمت كتابة الأدوات التي تولد تلقائيا حرفا من مواصفات معجمية مكتوبة في التعبيرات العادية ومحلل من العبارة النحوية المكتوبة في BNF: هذا يسمح للمرء باستخدام البرمجة التوضيحية ، بدلا من الحاجة إلى برمجة إجرائية أو وظيفية. ومن الأمثلة البارزة على ذلك الزوج lex-yacc
هذه تنتج تلقائيا شجرة بناء الجملة ملموسة. يجب كتابة كاتب المحلل اللغوي ثم كتابة التعليمات البرمجية بالضبط يصف كيف يتم تحويل هذا إلى شجرة بناء جملة مجردة.
كما يتم أيضًا تنفيذ التحليل السياقي يدويًا بشكل عام. على الرغم من وجود هذه الأدوات التلقائية ، غالبًا ما يتم تنفيذ التحليل اليدوي ، لأسباب متعددة - ربما لا يكون هيكل العبارة خاليًا من السياق ، أو يحسن التنفيذ البديل الأداء أو الإبلاغ عن الأخطاء ، أو يسمح بتغيير قواعد اللغة بسهولة أكبر. غالبًا ما يكتب المحللون باللغات الوظيفية ، مثل هاسكل ، أو في لغات البرمجة النصية ، مثل Python أو Perl ، أو C أو C ++.
 
<big>أمثلة على الأخطاء:</big>
مثال
 
(<big>add 1 1</big>) صالح من الناحية النحوية ولكن خطأ اذا كان :
 
 
{| class="wikitable"
|-
! (_ 1 1) lexical error: '_' is not valid
(add 1 1 parsing error: missing closing ')'
|}
 
مثال على البايثون:
{| class="wikitable"
|-
! 'a' + 1
 
|}
يحتوي على خطأ نوع لأنه يضيف سلسلة حرفية إلى عدد صحيح حرفي. يمكن اكتشاف أخطاء النوع من هذا النوع في وقت التحويل البرمجي: يمكن اكتشافها أثناء التحليل اللغوي (تحليل العبارة) إذا كان المحول البرمجي يستخدم قواعد منفصلة تسمح بـ "integer Literal + integer Literal" ولكن ليس "string Literal + integer Literal" ، على الرغم من أنه من المرجح أن سيستخدم المحول البرمجي قاعدة تحليل تسمح بكل تعبيرات النموذج "LiteralOrIdentifier + LiteralOrIdentifier" ومن ثم سيتم الكشف عن الخطأ أثناء التحليل السياقي (عند حدوث التحقق من الكتابة). في بعض الحالات ، لا يتم إجراء عملية التحقق هذه بواسطة المحول البرمجي ، ويتم اكتشاف هذه الأخطاء في وقت التشغيل فقط.
 
 
 
 
 
<big>تعريف بناء الجملة:</big>
 
تحليل شجرة بايثون مع رموز رمزية
عادةً ما يتم تعريف قواعد لغات البرمجة النصية باستخدام مجموعة من التعبيرات العادية (للبنية المعجمية) ونموذج باكوس-ناور (للهيكل النحوي) لتحديد الفئات النحوية (nonterminals) والرموز الطرفية. يتم تعريف الفئات النحوية بواسطة قواعد تسمى الإنتاجات ، والتي تحدد القيم التي تنتمي إلى فئة تركيبية معينة. [1] رموز المحطة الطرفية هي الأحرف أو السلاسل الخرسانية للأحرف (على سبيل المثال ، كلمات رئيسية مثل التعريف ، أو void)التي يتم إنشاء البرامج الصالحة لبناء جملة منها.
 
[[ملف:Python add5 parse.svg|تصغير|يسار]]
 
يمكن أن تحتوي اللغة على قواعد معادلة مختلفة ، مثل التعبيرات العادية المكافئة (عند المستويات المعجمية) ، أو قواعد مختلفة للغة التي تولد نفس اللغة. إن استخدام فئة أوسع من القواعد النحوية ، مثل قواعد النحو LR ، يمكن أن يسمح بقواعد grammars أقصر أو أبسط مقارنة مع فئات أكثر تقييدًا ، مثل قواعد LL ، والتي قد تتطلب قواعد نحوية أطول مع المزيد من القواعد. تعطي القواعد النحوية المختلفة لكن المكافئة لغازات مختلفة ، لكن اللغة الأساسية (مجموعة الوثائق الصالحة) هي نفسها.
 
مثال: تعبيرات Lisp S
يوجد أدناه قواعد بسيطة ، يتم تحديدها باستخدام تدوين التعبيرات العادية ونموذج Extended Backus – Naur. فهو يصف بناء جملة S-expressions ، وهي بنية بيانات للغة البرمجة Lisp ، والتي تحدد الإنتاجات الخاصة بالتعبير النحوي ، والذرة ، والرقم ، والقائمة:
{| class="wikitable"
|-
! expression = atom | list
 
atom = number | symbol
number = [+-]?['0'-'9']+
 
symbol = ['A'-'Z''a'-'z'].*
 
list = '(', expression*, ')'
|}
هذه القواعد تحدد ما يلي:
 
التعبير هو إما ذرة أو قائمة ؛
الذرة هي إما رقم أو رمز.
الرقم هو تسلسل غير متقطع من رقم واحد أو أكثر من الأرقام العشرية ، يسبقه اختياريًا علامة زائد أو ناقص ؛
الرمز هو حرف يتبعه صفر أو أكثر من أي أحرف (باستثناء المسافات البيضاء) ؛ و
القائمة هي زوج متطابق من الأقواس ، مع وجود تعبيرات صفر أو أكثر داخله.
هنا الأرقام العشرية والأحرف العلوية والسفلية والأقواس هي رموز طرفية.
 
فيما يلي أمثلة لتسلسلات الرمز المميز المكونة بشكل جيد في هذه القواعد: '12345'، '()'، '(a b c232 (1))'
 
<big>القواعد النحوية المعقدة:</big>
 
يمكن تصنيف القواعد الازمة لتحديد لغة البرمجة حسب موقعها في التسلسل الهرمي (Chomsky) يمكن تحديد القواعد النحوية لمعظم لغات البرمجة باستخدام قواعد النوع الثاني, أي أنها عبارة عن قواعد نحوية خالية من السياق .
في بعض اللغات مثلPerl و Lisp تسمح مواصفات اللغة بالبنيات التي يتم تنفيذها أثناء مرحلة الإعراب .علاوة على ذلك تحتوي هذه اللغات على بنية تسمح للمبرمج بتغير سلوك المحلل اللغوي. يعمل هذا المزيج على تطويق التميز بين التحليل والتنفيذ, ويجعل تحليل تركيب الجملة مشكلة غير قابلة للتكرار في هذه اللغات .مما يعنى أن مرحلة التحليل قد لا تنتهي . على سبيل المثال ، في Perl ، من الممكن تنفيذ التعليمات البرمجية أثناء التحليل اللغوي باستخدام عبارة BEGIN.
 
 
 
<big>بناء الجملة مقابل المعنى:</big>
 
تصف صيغة اللغة شكل برنامج صالح ، ولكنها لا تقدم أي معلومات حول معنى البرنامج أو نتائج تنفيذ ذلك البرنامج. يتم التعامل مع المعنى الممنوح لمزيج من الرموز من خلال المعنصحيحة، كانت رسمية أو مشفرة في تنفيذ مرجع). ليست كل البرامج الصحيحة من الناحية النحوية صحيحة لغويا. العديد من البرامج الصحيحة من الناحية النحوية هي مع ذلك غير صحيحة ، حسب قواعد اللغة. ويجوز (الحالات، مواصفات اللغة وسلامة التنفيذ) حدوث خطأ في الترجمة أو التنفيذ. في بعض الحالات ، قد تعرض مثل هذه البرامج سلوكًا غير معروف. حتى عندما يكون البرنامج محددًا بشكل جيد في لغة ما، قد يكون له معنى لا يقصده الشخص الذي كتبه.
 
باستخدام لغة طبيعية كمثال ، قد لا يكون من الممكن تحديد معنى لجملة صحيحة نحويًا أو قد تكون الجملة خاطئة:
 
"الأفكار الخضراء عديمة اللون النوم بشراسة." يتم تشكيله نحويًا بشكل جيد ولكن ليس له معنى مقبول بشكل عام.
"جون هو عازب متزوج". يتم تشكيله نحويًا بشكل جيد ولكنه يعبر عن معنى لا يمكن أن يكون صحيحًا.
== مراجع ==
{{مراجع}}