بيان (علوم الحاسوب)
في برمجة الحاسوب ، تُعدّ العبارة وحدةً نحويةً في لغة برمجة إجرائية ، تُعبّر عن إجراءٍ ما يُراد تنفيذه. [ 1 ] يتكوّن البرنامج المكتوب بهذه اللغة من سلسلةٍ من عبارةٍ واحدةٍ أو أكثر. وقد تحتوي العبارة على مكوناتٍ داخلية (مثل التعابير ).
تُفرّق العديد من لغات البرمجة (مثل Ada و Algol 60 و C و Java و Pascal ) [ 2 ] : 15 بين العبارات والتعريفات/التصريحات . يُحدد التعريف أو التصريح البيانات التي سيعمل عليها البرنامج، بينما تُحدد العبارة الإجراءات التي سيتم اتخاذها باستخدام تلك البيانات.
العبارات التي لا يمكن أن تحتوي على عبارات أخرى هي عبارات بسيطة ؛ أما تلك التي يمكن أن تحتوي على عبارات أخرى فهي عبارات مركبة . [ 3 ]
يتحدد شكل العبارة (والبرنامج أيضاً) من خلال تركيبها النحوي أو قواعدها. أما معنى العبارة فيتحدد من خلال دلالاتها .
عبارات بسيطة
تُعتبر العبارات البسيطة مكتملة في حد ذاتها؛ وتشمل هذه العبارات عمليات الإسناد، واستدعاءات الدوال الفرعية، وبعض العبارات التي قد تؤثر بشكل كبير على مسار تنفيذ البرنامج (مثل goto ، وreturn ، وstop/halt). في بعض لغات البرمجة، تُعالج عمليات الإدخال والإخراج، والتأكيدات، والخروج بواسطة عبارات خاصة، بينما تستخدم لغات أخرى استدعاءات لدوال فرعية مُعرَّفة مسبقًا.
- تكليف
- فورتران:
variable = expression - باسكال، ألغول 60، أدا:
variable := expression; - C، C#، C++، PHP، Java:
variable = expression;
- فورتران:
- يتصل
- فورتران:
CALL subroutine name(parameters) - سي، سي++، جافا، بي إتش بي، باسكال، أدا:
subroutine name(parameters);
- فورتران:
- تأكيد
- C، C++، PHP:
assert(relational expression); - جافا:
assert relational expression;
- C، C++، PHP:
- انتقل إلى
- فورتران:
GOTO numbered-label - Algol 60:
gotolabel; - C، C++، PHP، باسكال:
goto label;
- فورتران:
- يعود
- فورتران:
RETURN value - C، C++، Java، PHP:
return value;
- فورتران:
- قف/توقف/اخرج
- فورتران:
STOP number - C، C++:
exit(expression) - PHP:
exit number;
- فورتران:
العبارات المركبة
قد تحتوي العبارات المركبة على (سلاسل من) العبارات، قابلة للتداخل إلى أي عمق معقول، وتتضمن عمومًا اختبارات لتحديد ما إذا كان ينبغي اتباع هذه العبارات الواردة أو تكرارها أم لا.
- الرموز المستخدمة في الأمثلة التالية:
- <statement> هو أي عبارة مفردة (قد تكون بسيطة أو مركبة).
- <sequence> هو أي تسلسل من صفر أو أكثر من <statements>
- توفر بعض لغات البرمجة طريقة عامة لتجميع العبارات معًا، بحيث يمكن استبدال أي عبارة منفردة بمجموعة من العبارات:
- الرموز المستخدمة في الأمثلة التالية:
- Algol 60:
begin <sequence> end - باسكال:
begin <sequence> end - C، PHP، Java:
{ <sequence> }
- Algol 60:
- تستخدم لغات البرمجة الأخرى مُنهيًا خاصًا مختلفًا لكل نوع من أنواع العبارات المركبة، بحيث يتم التعامل مع عبارة واحدة أو أكثر تلقائيًا كمجموعة:
- آدا:
iftestthen<sequence>endif;
- آدا:
- تستخدم لغات البرمجة الأخرى مُنهيًا خاصًا مختلفًا لكل نوع من أنواع العبارات المركبة، بحيث يتم التعامل مع عبارة واحدة أو أكثر تلقائيًا كمجموعة:
تُعدّ العديد من العبارات المركبة أوامر حلقات تكرارية أو أوامر اختيار. نظريًا، يكفي استخدام أمر واحد من كل نوع. عمليًا، توجد حالات خاصة عديدة تتكرر كثيرًا؛ قد تُسهّل هذه الحالات فهم البرنامج، وتُبسّط عملية البرمجة، وغالبًا ما تُحسّن كفاءة التنفيذ. هناك تفاصيل دقيقة أخرى لم تُذكر هنا؛ راجع المقالات المرفقة لمزيد من المعلومات.
- حلقة تحكم بالعد :
- Algol 60:
for index := 1 step 1 until limit do <statement> ; - باسكال:
forindex:=1tolimitdo<statement>; - سي، جافا:
for(index=1;index<=limit;index+=1)<statement>; - آدا:
forindexin1..limitloop<sequence>endloop - فورتران 90:
كرر: index = 1 ، limit < sequence > END DO
- Algol 60:
- حلقة تحكم مشروطة مع اختبار في بداية الحلقة:
- Algol 60:
for index := expression while test do <statement> ; - باسكال:
whiletestdo<statement>; - سي، جافا:
while(test)<statement>; - آدا:
whiletestloop<sequence>endloop - فورتران 90:
كرر ما يلي: ( اختبار ) < تسلسل > نهاية التكرار
- Algol 60:
- حلقة تحكم مشروطة مع اختبار في نهاية الحلقة:
- باسكال:
repeat<sequence>untiltest;{ note reversed test } - سي، جافا:
do{<sequence>}while(test); - آدا:
loop<sequence>exitwhentest;endloop;
- باسكال:
- حلقة تحكم شرطية مع اختبار في منتصف الحلقة:
- ج:
do{<sequence>if(test)break;<sequence>}while(true); - آدا:
loop<sequence>exitwhentest;<sequence>endloop;
- ج:
- حالة بسيطة باستخدام عبارة if :
- Algol 60:
if test then <unconditional statement> ; - باسكال:
iftestthen<statement>; - سي، جافا:
if(test)<statement>; - آدا:
iftestthen<sequence>endif; - فورتران 77+:
إذا ( كان الاختبار صحيحًا ) فإن < التسلسل > انتهى الشرط
- Algol 60:
- خيار ثنائي الاتجاه في عبارة if :
- Algol 60:
if test then <unconditional statement> else <statement> ; - باسكال:
iftestthen<statement>else<statement>; - سي، جافا:
if(test)<statement>else<statement>; - آدا:
iftestthen<sequence>else<sequence>endif; - فورتران 77+:
إذا ( كان الاختبار صحيحًا ) فإن < التسلسل > وإلا فإن < التسلسل > انتهى الشرط
- Algol 60:
- خيار متعدد الاتجاهات في عبارة case/switch :
- باسكال:
casecof'a':alert();'q':quit();end; - آدا:
caseciswhen'a'=>alert();when'q'=>quit();endcase; - سي، جافا:
switch(c){case'a':alert();break;case'q':quit();break;}
- باسكال:
- معالجة الاستثناءات :
- آدا:
begin protected code except when exception specification => exception handler - جافا:
try { protected code } catch (exception specification) { exception handler } finally { cleanup } - بايثون:
try: protected code except exception specification: exception handler else: no exceptions finally: cleanup
- آدا:
بناء الجملة
بصرف النظر عن عمليات الإسناد واستدعاءات الدوال الفرعية، تبدأ معظم لغات البرمجة كل عبارة بكلمة خاصة (مثل goto، if، while، إلخ) كما هو موضح في الأمثلة أعلاه. وقد استُخدمت طرق متنوعة لوصف شكل العبارات في لغات البرمجة المختلفة؛ وتميل الطرق الأكثر رسمية إلى أن تكون أكثر دقة.
- استخدمت لغة Algol 60 صيغة Backus–Naur (BNF) التي وضعت مستوى جديدًا لتحديد قواعد اللغة. [ 4 ]
- حتى إصدار Fortran 77، تم وصف اللغة بالنثر الإنجليزي مع أمثلة، [ 5 ] ومن إصدار Fortran 90 فصاعدًا، تم وصف اللغة باستخدام صيغة BNF مختلفة. [ 6 ]
- استخدمت لغة كوبول لغة وصفية ثنائية الأبعاد. [ 7 ]
- استخدمت لغة باسكال كلاً من مخططات بناء الجملة و BNF المكافئ. [ 8 ]
تستخدم BNF التكرار للتعبير عن التكرار، لذلك تم اقتراح العديد من الامتدادات للسماح بالإشارة المباشرة إلى التكرار.
العبارات والكلمات المفتاحية
تحجز بعض قواعد لغات البرمجة كلمات مفتاحية أو تميزها بشكل خاص ، ولا تسمح باستخدامها كمعرفات . وهذا غالبًا ما يؤدي إلى قواعد أسهل في التحليل ، مما يقلل من الحاجة إلى البحث المسبق .
لا توجد كلمات مفتاحية مميزة
لا تحتوي لغتا فورتران و PL/1 على كلمات محجوزة، مما يسمح بعبارات مثل:
- في PL/1:
IF IF = THEN THEN ...(الثانيIFوالأولTHENمتغيران).
- في لغة فورتران:
IF (A) X = 10...العبارة الشرطية (مع صيغ أخرى)IF (A) = 2إسناد إلى متغير ذي فهرس باسمIF
- بما أن المسافات كانت اختيارية حتى إصدار Fortran 95، فإن خطأً مطبعياً يمكن أن يغير معنى العبارة تماماً:
DO 10 I = 1,5بداية حلقة تكرارية حيث يتم تشغيل I من 1 إلى 5DO 10 I = 1.5إسناد القيمة 1.5 إلى المتغيرDO10I
الكلمات التي تم وضع علامة عليها
في لغتي Algol 60 و Algol 68، تم تمييز الرموز الخاصة بشكل صريح: للنشر، بخط غامق مثلاً begin؛ وللبرمجة، بعلامات خاصة، مثلاً 'begin، علامة ( ) أو علامات اقتباس ( 'begin') أو خط تحتها ( beginعلى جهاز Elliott 503 ). يُطلق على هذا اسم "التمييز".
وبالتالي فإن الرموز التي تشكل جزءًا من بنية اللغة لا تتعارض مع الأسماء التي يحددها المبرمج.
الكلمات المحجوزة
تُحجز بعض الأسماء كجزء من لغة البرمجة، ولا يمكن استخدامها كأسماء يُعرّفها المبرمج. تستخدم معظم لغات البرمجة الشائعة الكلمات المحجوزة. من الأمثلة المبكرة على ذلك FLOW-MATIC (1953) و COBOL (1959). ومنذ عام 1970، تشمل الأمثلة الأخرى Ada وC وC++ وJava وPascal. يختلف عدد الكلمات المحجوزة باختلاف اللغة: تحتوي C على حوالي 30 كلمة، بينما تحتوي COBOL على حوالي 400 كلمة.
علم الدلالة
يهتم علم الدلالة بمعنى البرنامج. تستخدم وثائق المعايير للعديد من لغات البرمجة صيغة BNF أو ما يعادلها للتعبير عن بناء الجملة/القواعد بطريقة رسمية ودقيقة إلى حد ما، ولكن دلالات/معنى البرنامج تُوصف عمومًا باستخدام الأمثلة والنصوص الإنجليزية. قد يؤدي هذا إلى الغموض. [ 9 ] في بعض أوصاف اللغات، يُحدد معنى العبارات المركبة باستخدام بنيات "أبسط"، على سبيل المثال، يمكن تعريف حلقة while من خلال مجموعة من الاختبارات والقفزات والتسميات ، باستخدام if.goto
تتناول مقالة الدلالات عدة صيغ رياضية /منطقية استُخدمت لتحديد الدلالات بدقة؛ وهي عمومًا أكثر تعقيدًا من صيغة BNF، ولا يوجد نهج واحد يُعتبر الأمثل. بعض هذه المناهج يُعرّف مُفسِّرًا للغة، وبعضها يستخدم المنطق الصوري للاستدلال على البرنامج، وبعضها يُلحق لواحق بالوحدات النحوية لضمان الاتساق، وهكذا.
تعابير الوجه
يُفرّق عادةً بين العبارات، التي تُنفّذ، والتعبيرات ، التي تُقيّم. تُقيّم التعبيرات دائمًا إلى قيمة، على عكس العبارات. مع ذلك، تُستخدم التعبيرات غالبًا كجزء من عبارة أكبر.
في معظم لغات البرمجة، قد تتكون العبارة من تعبير بسيط، يُختتم عادةً بفاصلة منقوطة (فاصلة منقوطة). في هذه الحالة، بينما يُقيّم التعبير إلى قيمة، لا تُقيّم العبارة كاملةً (تُهمل قيمة التعبير). على سبيل المثال، في لغات C وC++ وC# والعديد من اللغات المشابهة، x = y + 1يُعد التعبير `x` تعبيرًا يُعيّن قيمة x إلى y زائد واحد، ويُقيّم التعبير نفسه إلى نفس القيمة التي عُيّنت لها x. مع ذلك، x = y + 1;(لاحظ الفاصلة المنقوطة في النهاية) تُعدّ عبارة تُعيّن قيمة x إلى y زائد واحد لأن التعبير داخل العبارة يُقيّم، لكن تُهمل نتيجة التعبير، ولا تُقيّم العبارة نفسها إلى أي قيمة. [ 10 ]
يمكن أيضًا تضمين التعبيرات داخل تعبيرات أخرى. على سبيل المثال، x = y + 1يحتوي التعبير على التعبير y + 1، والذي بدوره يحتوي على القيمتين yو 1، وهما أيضًا تعبيران من الناحية الفنية.
على الرغم من أن الأمثلة السابقة تُظهر تعابير الإسناد، فإن بعض اللغات لا تُنفذ الإسناد كتعبير، بل كعبارة. ومن الأمثلة البارزة على ذلك لغة بايثون ، حيث لا يُعدّ معامل الإسناد (=) عاملًا، بل مجرد فاصل في عبارة الإسناد. مع أن بايثون تسمح بإسنادات متعددة، حيث تُعتبر كل إسناد تعبيرًا، إلا أن هذه حالة خاصة من عبارة الإسناد المُدمجة في قواعد اللغة، وليست تعبيرًا حقيقيًا. [ 11 ]
قابلية التوسعة
تحتوي معظم اللغات على مجموعة ثابتة من العبارات التي تحددها اللغة، ولكن كانت هناك تجارب مع اللغات القابلة للتوسيع التي تسمح للمبرمج بتعريف عبارات جديدة.
انظر أيضاً
مراجع
- ↑ "بيان" . موسوعة الويب. سبتمبر 1996. تم الاسترجاع في 3 مارس 2015 .
- ^ دال، أولي-جوهان ؛ ميرهوغ، بيورن؛ نيجارد ، كريستين (1970). اللغة الأساسية المشتركة (PDF) (أبلغ عن). مركز الحوسبة النرويجي. مؤرشفة من الأصلي بتاريخ 2024-09-19 . تم الاسترجاع في 20 أغسطس 2025 .
- ^ باكوس، جيه دبليو؛ باور، فلوريدا؛ جرين، ج. كاتز، C .؛ مكارثي، J .؛ نور، ص. بيرليس، AJ؛ روتيسهاوزر، H .؛ سامويلسون، ك. فوكوا، ب. ويجستين، JH. فان فيجنجاردن، أ؛ وودجر، م. نور، بيتر (محرر). "تقرير منقح عن اللغة الخوارزمية ألغول 60" . الكتلة: العمل . القسم "4.1" . تم الاسترجاع في 23 يناير 2021 .
- ^ باكوس، جيه دبليو؛ باور، فلوريدا؛ جرين، ج. كاتز، C .؛ مكارثي، J .؛ نور، ص. بيرليس، AJ؛ روتيسهاوزر، H .؛ سامويلسون، ك. فوكوا، ب. ويجستين، JH. فان فيجنجاردن، أ؛ وودجر، م. نور، بيتر (محرر). "تقرير منقح عن اللغة الخوارزمية ألغول 60" . الكتلة: العمل . القسم "1.1" . تم الاسترجاع في 23 يناير 2021 .
- ↑ "FORTRAN" (ملف PDF) . معهد المعايير بالولايات المتحدة الأمريكية. 1966. تم الاطلاع عليه في 19 فبراير 2021 – عبر مجموعة العمل 5 لمعايير Fortran.
- ↑ "مسودة عمل J3/04-007" (ملف PDF) . J3 Fortran. 10 مايو 2004. تم الاطلاع عليه في 19 فبراير 2021 .
- ↑ "دليل مرجعي لبرمجة ASCII COBOL" (ملف PDF) . unisys. يونيو 2010. تم الاطلاع عليه في 23 يناير 2021 .
- ↑ جينسن، كاثلين؛ ويرث، نيكلاوس (1974). غوس، جي.؛ هارتمانيس، ج. (محرران). "دليل مستخدم باسكال وتقريره" (ملف PDF) . سلسلة محاضرات في علوم الحاسوب . الملحق د . تم الاطلاع عليه بتاريخ 19 فبراير 2021 .
- ↑ كنوت، دي إي (يوليو 1967). "مواضع المشاكل المتبقية في ألغول 60" (ملف PDF) . عائلة ألغول . تم الاطلاع عليه بتاريخ 24 فبراير 2021 .
- ↑ "ISO/IEC 9899:1999 (E)" (ملف PDF) . ISO/IEC . مؤرشف (ملف PDF) من الأصل بتاريخ 7 فبراير 2024.
- ↑ "7. عبارات بسيطة" . وثائق بايثون 3.10.8 .
روابط خارجية
- مفاهيم لغة البرمجة
- البيانات
