CIS217 Concepts of Programming Languages - Chapter 1 PDF
Document Details
Uploaded by WellBredBlackberryBush126
King Khalid University - جامعة الملك خالد
Tags
Summary
This document provides an introduction to programming languages, discussing reasons for studying them and different programming domains. It highlights the importance of understanding language concepts for choosing suitable languages for projects and learning new languages. It also emphasizes the importance of implementation issues.
Full Transcript
CIS217 CONCEPTS OF PROGRAMMING LANGUAGES CHAPTER-1 PRELIMINARIES Outline Reasons for Studying Concepts of Programming Languages Programming Domains Language Evalua;on Criteria In=uences on Language Design Language Categories Language Design Trade-OAs Implementa;on Meth...
CIS217 CONCEPTS OF PROGRAMMING LANGUAGES CHAPTER-1 PRELIMINARIES Outline Reasons for Studying Concepts of Programming Languages Programming Domains Language Evalua;on Criteria In=uences on Language Design Language Categories Language Design Trade-OAs Implementa;on Methods Programming Environments Summary Reasons for Studying Concepts of Programming Languages أسباب دراسة مفاهيم لغات البرمجة زيادة القدرة على التعبير عن األفكار Increased ability to express ideas من املعتقد أن العمق الذي نعتقد أنه متأثر بالقوة التعبيرية للغة فيه-.مكر ًرا ّ لفظيًا أو، من الصعب على الناس تصور الهياكل التي ال يمكنهم وصفها.التي ننقل أفكارنا – It is believed that the depth at which we think is in=uenced by the expressive power of the language in which we communicate our thoughts. It is diIcult for people to conceptualize structures they can’t describe, verbally or in wri;ng. Improved background for choosing appropriate languages خلفية محسنة الختيار اللغات املناسبة – Many programmers, when given a choice of languages for a new project, con;nue to use the language with which they are most familiar, even if it is poorly suited to new projects.. حتى لو كانت غير مناسبة للمشاريع الجديدة، يواصلون استخدام اللغة مع التي هم أكثر دراية بها، عند اختيارهم للغات ملشروع جديد، العديد من املبرمجني- – If these programmers were familiar with other languages available, they would be in a beNer posi;on to make informed language choices.. فسيكونون في وضع أفضل اتخاذ خيارات لغوية مستنيرة، إذا كان هؤالء املبرمجون على دراية باللغات األخرى املتاحة- Increased ability to learn new languages زيادة القدرة على تعلم لغات جديدة – Programming languages are s;ll in a state of con;nuous evolu;on, which means con;nuous learning is essen;al.. مما يعني أن التعلم متصل جوهري، لغات البرمجة ال تزال في حالة تطور متصل- – The TIOBE Programming Community issues an index (hNps://www.;obe.com/;obe-index) that is an indicator of the rela;ve popularity of programming languages..( يمثل مؤشر لشعبية لغات البرمجةhtps: //www.iobe.com/iobe-index) فهرسا ً TIOBE يصدر مجتمع برمجة- Reasons for Studying Concepts of Programming Languages فهم أفضل ألهمية التنفيذ BeAer understanding of signiBcance of implementaCon. يؤدي فهم قضايا التنفيذ إلى فهم سبب تصميم اللغات بالطريقة هم انهم- – Understanding of implementa;on issues leads to an understanding of why languages are designed the way they are.. حيث تم تصميمها لالستخدام، وهذا بدوره يؤدي إلى القدرة على استخدام اللغة بشكل أكثر ذكا ًء- – This in turn leads to the ability to use a language more intelligently, as it was designed to be use. BeAer use of languages that are already known استخدام أفضل للغات املعروفة بالفعل – The more languages you gain knowledge of, the beNer understanding of programming languages concepts you understand.. كان من األفضل فهم مفاهيم لغات البرمجة أنت تفهم، كلما زادت معرفتك باللغات- Overall advancement of compuCng – In some cases, a language became widely used, at least in part, because those in posi;ons to choose languages were not suIciently familiar with programming language concepts. التقدم الشامل للكومبيوتر ألن من هم في وضعيات يختارون لم تكن اللغات على دراية كافية بمفاهيم لغة، على األقل جزئ ًيا، أصبحت اللغة مستخدمة على نطاق واسع، في بعض الحاالت-.البرمجة مجاالت البرمجة Programming Domains ScienCBc applicaCons تطبيقات علمية – The applica;ons require large number of =oa;ng-point computa;ons..كبيرا من حسابات نقطة التساهل ً تتطلب الطلبات عد ًدا-. كانت لغة فورتران أول لغة تم تطويرها في تطبيقات علمية- – Fortran was the Wrst language developed scien;Wc applica;ons. - ALGOL 60 مخصص لنفس االستخدام. – ALGOL 60 was intended for the same use. Business applicaCons – The Wrst successful language for business was COBOL. – Producing reports, precise ways of describing and storing decimal numbers and character data, and the ability to specify decimal arithme;c opera;ons. – The arrival of PCs started new ways for businesses to use computers. تطبيقات األعمال.COBOL أول لغة ناجحة لألعمال كانت-. إنتاج تقارير وطرق دقيقة لوصف وتخزين األرقام العشرية وبيانات األحرف و القدرة على تحديد العمليات الحسابية العشرية-. بدأ وصول أجهزة الكمبيوتر في طرق جديدة للشركات الستخدام أجهزة الكمبيوتر- Programming Domains ذكاء أريسيال. يتم التالعب بالحسابات الرمزية بدالً من الحسابات الرقمية- ArCBcial intelligence. الحوسبة الرمزية أكثر مالءمة مع القوائم املرتبطة من املصفوفات- – Symbolic rather than numeric computa;ons are manipulated. - LISP ، Prolog ، املخطط املستخدم لبرمجة الذكاء االصطناعي – Symbolic computa;on is more suitably done with linked lists than arrays. – LISP, Prolog, Scheme used for AI programming Systems programming – Need eIciency because of con;nuous use. – A language for this domain must provide fast execu;on. Furthermore, it must have low-level features that allow the so]ware interfaces to external devices to be wriNen. – The UNIX opera;ng system is wriNen almost en;rely in C. برمجة األنظمة. الحاجة إلى الكفاءة بسبب االستخدام املترابط- يجب أن يحتوي على ميزات منخفضة املستوى السماح لكتابة واجهات البرامج الخفية لألجهزة، عالوة على ذلك. يجب أن توفر لغة لهذا املجال تنفيذًا سري ًعا-.الخارجية.C مكتوب بشكل نشط تقريبًا فيUNIX نظام التشغيل- Programming Domains Web soGware – The World Wide Web is supported by an eclec;c collec;on of languages: markup languages (e.g. HTML), scrip;ng (e.g. PHP), general-purpose (e.g. Java) – JavaScript is used mostly as a client-side scrip;ng language. JavaScript is embedded in HTML documents and is interpreted by a browser that Wnds the code in a document that is being displayed. – PHP is a scrip;ng language used on Web server systems. Its code is embedded in HTML documents. The code is interpreted on the server before the document is sent to a reques;ng browser. برامج الويب ( لألغراض العامة )مثل جافا، (PHP سكريبينج )مثل، (HTML لغات الترميز )مثل: شبكة الويب العاملية مدعومة بمجموعة منتقاة من اللغات- و يتم تفسيره بواسطة مستعرض يجد الرمز في املستندHTML في مستنداتJavaScript تم تضمني. في الغالب كلغة برمجة نصية من جانب العميلJavaScript يتم استخدام-.الذي يتم عرضه - PHP رمزها مضمن في مستندات. هي لغة برمجة نصية مستخدمة في أنظمة خادم الويبHTML. ال.يتم تفسير التعليمات البرمجية على الخادم قبل إرسال املستند إلى املستعرض الذي يطلبه Language EvaluaCon Criteria معايير تقييم اللغة Readability – The ease with which programs can be read and understood Writability – The ease with which a language can be used to create programs Reliability – Conformance to speciWca;ons (i.e., performs to its speciWca;ons) املقروئية Cost السهولة التي يمكن بها قراءة البرامج وفهمها- – The ul;mate total cost قابلية الكتابة السهولة التي يمكن بها استخدام اللغة إلنشاء البرامج- املوثوقية ( املطابقة للمواصفات )أي ينفذ حسب مواصفاته- التكلفة ulimate التكلفة اإلجمالية- Other Language EvaluaCon Criteria Portability – The ease with which programs can be moved from one implementa;on to another Generality – The applicability to a wide range of applica;ons Well-deBned – The completeness and precision of the language’s oIcial deWning document قابلية السهولة التي يمكن بها نقل البرامج من تنفيذ إلى آخر- العمومية قابلية التطبيق على مجموعة واسعة من التطبيقات- مصممة بشكل جيد اكتمال ودقة وثيقة تعريف اللغة الرسمية- Language EvaluaCon Criteria InKuences on Language Design Computer Architecture InKuences on Language Design Computer Architecture – Fetch-execute-cycle (on a von Neumann architecture computer) التأثيرات على تصميم اللغة InKuences on Language Design منهجيات البرمجة Programming Methodologies تطبيقات بسيطة: الخمسينيات وأوائل الستينيات- – 1950s and early 1960s: Simple applica;ons القلق بشأن كفاءة اآللة worry about machine eIciency موجه نحو العمليات: أواخر الستينيات- – Late 1960s: Process-oriented هياكل تحكم أفضل، املقروئية. أصبحت كفاءة الناس مهمة People eIciency became important; readability, beNer control structures برمجة منظمة Structured programming تصميم من أعلى إلى أسفل وعودة تدريجية Top-down design and step-wise reWnement Late 1970s: Process-oriented to data-oriented – data abstrac;on عملية املنحى إلى البيانات: أواخر السبعينيات Middle 1980s: Object-oriented programming تجريد البيانات- – Data abstrac;on + inheritance + polymorphism البرمجة الشيئية: منتصف الثمانينيات تعدد األشكال+ الوراثة+ تجريد البيانات- فئات اللغة Language Categories Imperaive - السمات املركزية هي املتغيرات وبيانات التخصيص والتكرار ImperaCve – Central features are variables, assignment statements, and iteraCon تضمني اللغات التي تدعم البرمجة الشيئية- – Include languages that support object-oriented programming تضمني لغات الكتابة- – Include scrip;ng languages تضمني اللغات املرئية- – Include the visual languages ++ C ، Java ، Perl ، JavaScript ، Visual BASIC.NET ، C : أمثلة- – Examples: C, Java, Perl, JavaScript, Visual BASIC.NET, C++ FuncConal – Main means of making computa;ons is by applying func;ons to given parameters خيالي – Examples: LISP, Scheme, ML, F# الوسائل الرئيسية إلجراء الحسابات هي من خالل تطبيق وظائف على معلمات معينة- # LISP ، Scheme ، ML ، F : أمثلة- Logic – Rule-based (rules are speciWed in no par;cular order) املنطق – Example: Prolog ( على أساس القواعد )القواعد محددة في أي ترتيب معني- برولوج: مثال- Markup/programming hybrid البرمجة املختلطة/ الترميز – Markup languages extended to support some programming مددت لغات الترميز لدعم بعض البرمجة- – Examples: JSTL, XSLT JSTL ، XSLT : أمثلة- مقايضات تصميم اللغة Language Design Trade-OYs املوثوقية مقابل تكلفة التنفيذ Reliability vs. Cost of execuCon. مما يؤدي إلى زيادة تكاليف التنفيذ، فحص جميع املراجع إلى عناصر املصفوفة من أجل الفهرسة املناسبةJava تطلب:مثال – Example: Java demands all references to array elements be checked for proper indexing, which leads to increased execu;on costs. فحص نطاق الفهرسC ال تتطلب- – C does not require index range checking – C programs execute faster than seman;cally equivalent Java programs, although Java programs are more reliable. على الرغم من أن برامج اكثر موثوقية، املكافئة لغويًاJava بشكل أسرع من برامجC حيث يتم تنفيذ برامج Readability vs. Writability املقروئية مقابل القابلية للكتابة – Example: APL provides many powerful operators (and a large number of new symbols), allowing complex computa;ons to be wriNen in a compact program but at the cost of poor readability مما يسمح، ( العديد من املشغلني األقوياء )وعدد كبير من الرموز الجديدةAPL يوفر: مثال- Writability (Kexibility) vs. Reliability يجب كتابة الحسابات املعقدة في برنامج مضغوط ولكن على حساب ضعف قابلية القراءة – Example: C pointers are powerful and very =exible but are unreliable – Because of the poten;al reliability problems with pointers, they are not included in Java القابلية للكتابة )املعجم( مقابل املوثوقية قوية ومعجمية للغاية ولكنها غير موثوقةC مؤشرات: مثال- Java لم يتم تضمينها في، بسبب مشاكل املوثوقية املحتملة مع املؤشرات- ImplementaCon Methods طرق التنفيذ The major methods of implemenCng programming languages are compilaCon, pure interpretaCon, and hybrid implementaCon – Compila;on: Programs are translated into machine language – Pure Interpreta;on: Programs are interpreted by another program known as an interpreter – Hybrid Implementa;on Systems: A compromise between compilers and pure interpreters The operaCng system and language implementaCon are layered over machine interface of a computer. These layers can be thought of as virtual computers, providing interfaces to the user at higher levels ، والتفسير الخالص، الطرق الرئيسية لتطبيق لغات البرمجة هي التجميع والتنفيذ الهجني تتم ترجمة البرامج إلى لغة اآللة: التجميع- - Pure Interpretaion: يتم تفسير البرامج بواسطة برنامج آخر يُعرف باسم املترجم الفوري حل وسط بني املترجمني واملترجمني الفوريني: أنظمة التنفيذ الهجينة-. الحاسوبa يتم وضع نظام التشغيل وتطبيق اللغة على طبقات فوق واجهة الجهاز من مما يوفر واجهات للمستخدم بمستويات أعلى، يمكن اعتبار هذه الطبقات بمثابة أجهزة كمبيوتر افتراضية ImplementaCon Methods ImplementaCon Methods 1. CompilaCon – Translate high-level program (source language) into machine code (machine language) – Slow transla;on, fast execu;on – C, COBOL, C++, and Ada are by compilers. تجميع.1 برنامج ترجمة عالي املستوى )املصدر- لغة( في كود اآللة )آلة (لغة وتنفيذ سريع، ترجمة بطيئة- - C وCOBOL وC ++ وAda حسب.املجمعني ImplementaCon Methods 2. Pure InterpretaCon – Programs are interpreted by another program called an interpreter, with no transla;on. – Advantage: Easier implementa;on of many source-level debugging opera;ons, because all run-;me error messages can refer to source-level تفسير نقي.2 units..ترجمة وجود عدم مع ، مترجم يسمى برنامج آخر شخص قبل من البرامج يتم تفسير- run-ime ألن كل خطأ، سهولة التنفيذ العديد من تصحيح األخطاء على مستوى املصدر العمليات: امليزة- – Disadvantage: Slower execu;on (10 to يمكن أن تشير الرسائل إلى مستوى املصدر 100 ;mes slower than compiled.الوحدات programs) إلى 10) التنفيذ في أبطأ : العيب- 100 imes أبطأ من املترجمة – SigniWcant comeback with some Web (البرامج scrip;ng languages (e.g., JavaScript and عودة مهمة مع بعض الويب- PHP). وJavaScript ، لغات الكتابة )على سبيل املثال.(بي أتش بي ImplementaCon Methods 3. Hybrid ImplementaCon Systems: – A compromise between compilers and pure interpreters – A high-level language program is translated to an intermediate language : أنظمة التنفيذ الهجينة.3 that allows easy interpreta;on حل وسط بني املجمعني و- برنامج لغوي رفيع املستوى هو- مترجمون نقيون – Faster than pure interpreta;on مترجمة إلى لغة وسيطة – Examples: الوسيطة: كانت جافا هجينة- : أمثلة- أسرع من التفسير الخالص- سهالً تفسيرا ً التي تتيح إمكانية النقل إلى ملفات، رمز البايت، يوفر النموذج – Java were hybrid: the intermediate أي جهاز يحتوي على رمز بايت form, byte code, provides portability to IME مترجم فوري ونظام any machine that has a byte code Java Virtual )تسمى هذه م ًعا interpreter and a run-;me system (آلة (together, these are called Java Virtual Machine) بيئة البرمجة مجموعة األدوات املستخدمة في تطوير البرامج Programming Environment UNIX - نظام تشغيل قديم ومجموعة أدوات UNIX ( التي يتم تشغيلها أعلىGNOME أوKDE أوCDE ، من خالل واجهة املستخدم الرسومية )على سبيل املثالoten في الوقت الحاضر يتم استخدام- The collecCon of tools used in soGware development UNIX – An older operaCng system and tool collecCon – Nowadays o]en used through a GUI (e.g., CDE, KDE, or GNOME) that runs on top of UNIX Borland JBuilder Borland JBuilder Java بيئة تطوير متكاملة لـ- – An integrated development environment for Java Microsot Visual Studio.NET بيئة بصرية كبيرة ومعقدة- MicrosoG Visual Studio.NET ++ C )لغة وظيفية( و# F ( وJavaScript منMicrosot )إصدارJScript وVisual Basic.NET و# C تُستخدم للبرمجة في- – A large, complex visual environment – Used to program in C#, Visual Basic.NET, JScript (Microso]’s version of JavaScript), F# (a func;onal language), and C++ NetBeans NetBeans وRuby وJavaScript أيضا ً ولكنه يدعمJava يستخدم بشكل أساسي في تطبيق- – Primarily used for Java applica;on but also supports JavaScript, Ruby, and PHP PHP Anaconda Anaconda Python وR تستخدم بشكل أساسي للغات علوم البيانات مثل- – Primarily used for Data Science Languages such as R, Python EvoluCon of the Major Programming Languages Summary The study of programming language is valuable for several important reasons: – Increases our capacity to use diAerent constructs in wri;ng programs – Enables us to choose languages for projects more intelligently : تعتبر دراسة لغة البرمجة قيّمة لعدة أسباب مهمة – Makes learning new languages easier يزيد من قدرتنا على استخدام بنيات مختلفة في برامج الحياكة- تمكننا من اختيار اللغات للمشاريع بشكل أكثر ذكا ًء- Among the most important criteria for evaluaCng languages are: يجعل تعلم لغات جديدة أسهل- – Readability – Writability : من بني أهم معايير تقييم اللغات ما يلي – Reliability مقروئية- القابلية للكتابة- – Overall cost مصداقية- The major methods of implemenCng program languages are التكلفة اإلجمالية- – Compila;on الطرق الرئيسية لتطبيق لغات البرنامج هي – Pure interpreta;on تجميع- نقية التفسير- – Hybrid implementa;on التنفيذ الهجني- بناء جملة -شكل التعبيرات والبيانات وحدات البرنامج .دالالت -معنى التعبيرات والبيانات وحدات البرنامج. السابقني :بناء جملة جافا أثناء بيان )(Boolean_Expr شكل نموذج البيان هذا هو أنه عندما تكون القيمة الحالية للتعبير املنطقي صحيح ،يتم تنفيذ العبارة املضمنة. املشكلة العامة لوصف بناء الجملة لغة هي مجموعة من الجمل. جملة أو "عبارة" هي سلسلة من األحرف فوق بعض األبجدية.تحدد قواعد بناء الجملة اللغات التي تحدد سالسل األحرف من األبجدية باللغة باللغة. ليكسيم هو أدنى مستوى وحدة النحوية من مستوى اللغة.ويشمل الرؤساء والضربي واملشغلون والكلمة الخاصة ) ،E.G. *، SUMابدأ(.البرنامج هو سالسل من .lexemes رمزية هي فئة من ) lexemesعلى سبيل املثال ،معرف(.معرف هو رمز رمزي له ،lexemesأو مثيالت ،مثل املبلغ واإلجمالي. املعاملات واملولدات يقرأ جهاز االعتراف سالسل اإلدخال من اللغة ويقرر ما إذا املعرفة باللغة: كانت سالسل املدخالت تنتمي إلى اللغة. يحدد فقط ما إذا كانت هذه البرامج في اللغة. مولدات اللغة: مثال :جزء محلل بناء الجملة جزء من مترجم.يحدد محلل بناء الجملة ،املعروف أيضا باسم املحللني ،ما إذا كانت البرامج املحددة صحيحة بشكل صحيح. جهاز ينشئ جمل لغة يمكن للمرء تحديد ما إذا كان بناء جملة جملة معينة صحيحة عن طريق الكومفارجينج له بنية املولد ،تنتمي إلى اللغة اإلدخال اللغة. 3.3الطرق الرسمية لوصف بناء الجملة تتطلب آليات توليد اللغة الرسمية عادة النحوية .يستخدم النحو عادة لوصف بناء جملة لغات البرمجة. 3.3.1شكل باوسوس نور ونواسات الحواس الخالية من السياق إنه مسؤول في بناء جملة وصفت الطريقة األكثر استخداما في بناء جملة لغة البرمجة. 3.3.1.1النمسدات الخالية من السياق خال من السياق والناسون العاديني مفيدة لوصف بناء جملة لغات البرمجة. يمكن وصف الرموز لغات البرمجة من قبل النحو العادي. يمكن وصف لغات البرمجة بأكملها من قبل النحو الخالي من السياق. 3.3.1.2أصول نموذج )Backus-Naur (1959 .يعادل قواعد النحوية الخالية من السياق املستخدمة في وصف بناء الجملة ) Backus-Naurنموذج( BNF 3.3.1.3األساسيات .لغوية البرمجة metachanguageهو . BNFهي لغة تستخدم لوصف لغة أخرى Metalanguage في ،BNFيتم استخدام التجريدات لتمثيل فئات من الهياكل النحوية. القاعدة لديها جانب يساري )" (LHSيتم تعريف التجريد" ويتألف التجريد من الجانب األيمن )" (RHSمن بعض الخليط من الرموز والرمز واملراجع إلى التجريدات األخرى" ،وتتكون من املحطة وعدم وجودها الرموز. القواعد النحوية هي مجموعة من القواعد املختصة غير املختصة وتسمى التجريدات الرموز غير اليدوية ،أو ببساطة غير حكومي. تسمى Lexemesورموز القواعد الرموز الطرفية أو املحطات الطرفية وصف ،BNFأو القواعد ،هو مجرد مجموعة من القواعد. يمكن أن يكون للمختلم )أو الرمز غير العام( أكثر من RHS على سبيل املثال ،يمكن وصف جافا إذا كان يمكن وصف العبارة بالقبالة يمكن كتابة تعريفات متعددة كقاعدة واحدة ،مع تعريفات مختلفة مفصولة من الرمز | ،وهذا يعني املنطقي أو. 3.3.1.4وصف القوائم يتم وصف قوائم النحوية باستخدام العودية. قاعدة تكرر إذا ظهر LHSفي .RHS 3.3.1.5النمسدات واالشتقاق يتم إنشاء جمل اللغة من خالل سلسلة من تطبيقات القواعد ،بدءا من عدم وجود غير حكومي خاص من القواعد يسمى رمز البداية. االشتقاق هو تطبيق متكرر للقواعد ،بدءا من رمز البدء وإنهاء الجملة )جميع الرموز الطرفية( 3.3.1.6ترسي األشجار تسمى الهياكل الهرمية للغة اللغة ترسي األشجار. شجرة تحليل للبيان البسيط )A = B * (A + C 3.3.1.7الغموض القواعد النحوية غامضة إذا كان بإنشاء نموذج أساسي يحتوي على اثنني أو أكثر من أشجار تحليل مميزة. مثال 3.3قواعد قواعد غامضة لبيانات مهمة صغيرة شجرتان تحليالن متميزان لنفس الجملةA = B + C * A ، 3.3.1.8األسبقية املشغل عندما يتضمن التعبير مشغلني مختلفني ،على سبيل املثال ،X + Y * Z ،هناك مشكلة داللة واحدة واضحة هي ترتيب تقييم املشغلني. حقيقة أن املشغل في تعبير حسابي يتم إنشاؤه أقل في شجرة التحليل يمكن استخدامه لإلشارة إلى أن لهما أسبقية أعلى على أحد املشغل أنتج أعلى في الشجرة. مثال 3.4قواعد قواعد ال لبس فيها للتعبيرات 3.3.1.9الزملية للمشغلني عندما يتضمن التعبير مشغالين لديهم نفس األسبقية )كما * و /عادة( -مثال على سبيل املثال-A / B * C ، مطلوب قاعدة داللية لتحديد األسبقية.هذه القاعدة تسمى الزملية. عندما تظهر قاعدة قواعد اللغة LHSأيضا في بداية ،RHSيقال إن القاعدة تترك العودية والتأشيرة بالعكس. 3.3.2املوسعة BNF ملحقات EBNFال تعزز القوى الوصفية ل BNF؛ أنها تزيد فقط من قابلية القراءة والتجديد. يتم تضمني ثالثة تمديد شائع في إصدارات مختلفة من :EBNF يتم وضع األجزاء االختيارية بني قوسني )][( وضع التكرار ) 0أو أكثر( في األقواس )}{( ضع خيارات متعددة الخيارات من RHSSبني قوسني وفصلها مع أشرطة رأسية )| أو مشغل( 3.4سمة النحو السمة هو جهاز يستخدم لوصف املزيد Grammar من هيكل لغة البرمجة مما يمكن وصفه بقصو قواعد خالية .من السياق تكون الدالالت الثابتة للغة مرتبطة فقط بمعنى البرامج أثناء التنفيذ؛ بدال من ذلك ،يجب 3.4.1دالالت ثابتة أن تفعل مع األشكال القانونية للبرامج )بناء جملة بدال من دالالت(. العديد من القواعد الداللية الثابتة لدولة اللغة قيود نوعها.يتم تسمية دالالت ثابتة للغاية ألن التحليل املطلوب 3.4.2املفاهيم األساسية لهذه املواصفات يمكن القيام به في وقت الترجمة. سمة النمسدات لديها إضافات من النواة الخالية من السياق لنقل بعض املعلومات الداللية عن حدة تحليل شجرة. قواعد النمسات السمة هي قواعد النحوية الخالية من السياق تم 3.4.3قواعد األسمة املحددة إضافتها إلى سمات ووظائف حساب السمة ووظيفة املسند. تستخدم السمات املركبة لتمرير معلومات الداللية حتى شجرة تحليل. سمات موروثة تمرير معلومات داللية وصوال 3.4.4السمات الجوهرية السمات الجوهرية هي سمات توليف لعقد األوراق التي يتم تحديد قيمها خارج شجرة التحليل. على سبيل املثال ،يمكن أن يأتي نوع مثيل املتغير في برنامج نموذج جدول الرموز ،والذي يستخدم لتخزين أسماء متغيرة وأنواعها. سمة توليف مرتبطة بعدم التشغيل Actual_Type - 3.4.5األمثلة سمة قواعد النهر .و > 1} : واحد مسبق ممكن} :ب< {10 أضعف الشرط املسبق} :ب< {0 عملية إثبات البرنامج PostCondition :للبرنامج بأكمله هي النتيجة املرجوة.العمل مرة أخرى من خالل البرنامج إلى البيان األول.إذا كان الشرط املسبق في العبارة األولى هو نفس مواصفات البرنامج ،فإن البرنامج صحيح AXIOM.عبارة عن بيان منطقي يفترض أن يكون صحيحا قاعدة االستدالل هي طريقة الستنتاج حقيقة تأكيد واحد على أساس قيم التأكيدات األخرى. 3.5.3.3بيانات التعيني يتم احتساب الشرط املسبق األضعف من خالل استبدال B / 2 -1في التأكيد } {A 1لشرط االختيار املسبق 3.5.3.6حلقات االختبار منطقية الحوسبة ضعف الشرط املسبق ) (WPألكثر من األحداث أكثر صعوبة بطبيعتها أكثر صعوبة من أجل تسلسل ،B / Cال يمكن دائما تحديد عدد التكرارات سلفا سلفا. الخطوة املقابلة في الدالالت البديسية في حلقة أثناء العثور على تأكيد يسمى حلقة ثابتة ،وهو أمر بالغ األهمية إليجاد أضعف شرط مسبق. من الواضح اآلن أن } {y , etc.) – Catenation – Substring reference – Pattern matching – مهمةا – ). إلخ، >، =( لمقارنة – السلسال – مرجع السلسلة الفرعية – نمط مطابقة C and C++ use char arrays to store char strings and provide a collection of string operations through a standard library whose header is string.h تستخدمC وC ++ مصفوفاتchar لتخزين سالسلchar وتوفي مجموعة من عمليات السلسلة من خالل مكتبة قياسية يكون رأسهاstring.h 6.3.2 String Length Options – Static Length String: The length can be static and set when the string is created. This is the choice for the immutable objects of Java’s String class as well as similar classes in the C++ standard class library and the.NET class library available to C# and F# ً – Static Length String: غث القابلة هذا هو االختيار للكائنات ر.يمكن أن يكون الطول ثابتا ويتم ضبطه عند إنشاء السلسلة ن للتغيث لفئة سلسلةJava ر باإلضافة إىل الفئات المماثلة يف مكتبة فئةC ++. القياسية ومكتبة فئةNET المتاحة لـC # وF # – Limited Dynamic Length Strings: allow strings to have varying length up to a declared and fixed maximum set by the variable’s definition, as exemplified by the strings in C – السماح للسالسل بأن يكون لها أطوال متفاوتة تصل إىل الحد األقىص المعلن والثابت:الديناميك المحدود ي سالسل الطول ن كما يتضح من السالسل يف، المتغث ر الذي تم تعيينه بواسطة تعريفC – Dynamic Length Strings: Allows strings various length with no maximum. This option requires the overhead of dynamic storage allocation and deallocation but provides flexibility. Ex: Perl and JavaScript – يتطلب هذا الخيار عبء تخصيص التخزين. تسمح للسالسل بأطوال مختلفة بدون حد أقىص:الديناميك ي سالسل الطول : عىل سبيل المثال.الديناميك وإلغاء التخصيص ولكنه يوفر المرونة ي Perl وJavaScript 6.4 Enumeration Types All possible values, which are named constants, are provided, or enumerated, in the definition يف التعريف، الت تسىم ثوابت ي، يتم توفي أو تعداد جميع القيم الممكنة Enumeration types provide a way of defining and grouping collections of named constants, which are called enumeration constants والت تسم ثوابت التعداد ي، توفر أنواع التعداد طريقة لتعريف وتجميع مجموعات الثوابت المسماة – C# example enum days {mon, tue, wed, thu, fri, sat, sun}; – The enumeration constants are typically implicitly assigned the integer values, 0, 1, …, but can explicitly assigned any integer literal in the type’s definition ً ً عادة ما يتم ر ن – ولكن يمكن تحديد أي عدد صحيح حرفية،... ، 1 ، 0 ، ضمنيا إىل ثوابت التعداد تعيي قيم األعداد الصحيحة ن بشكل رصي ــح يف تعريف النوع 6.5 Array Types An array is a homogeneous aggregate of data elements in which an individual element is identified by its position in the aggregate, relative to the first element. ، المصفوفة عبارة عن مجموعة متجانسة من عنارص البيانات يتم فيها تحديد عنرص فردي من خالل موضعه يف التجميع.بالنسبة للعنرص األول The individual data elements of an array are of the same type..عنارص البيانات الفردية للمصفوفة من نفس النوع References to individual array elements are specified using subscription expressions..تعبثات االشثاك يتم تحديد مراجع عنارص المصفوفة الفردية باستخدام ر If any of the subscript expressions in a reference include variables, then the reference will require an addition run-time calculation to determine the address of the memory location being referenced. ً ً إضافيا لوقت التشغيل لتحديد عنوان فسيتطلب المرجع حسابا، إذا كان أي من التعبيات المنخفضة يف مرجع يتضمن متغيات.موقع الذاكرة الذي تتم اإلشارة إليه 6.5.1 Arrays and Indices Indexing (or subscripting) is a mapping from indices to elements..ه تعيي من المؤشات إىل العنارص الفهرسة (أو االشياك) ي The mapping can be shown as: array_name (index_value_list) → an element C-based languages use [ ] to delimit array indices. تستخدم اللغات المستندة إىلC [].لتحديد فهارس المصفوفة Two distinct types are involved in an array type: :هناك نوعان متميان متضمنان يف نوع المصفوفة – The element type, and – نوع العنرص – The type of the subscripts. –.نوع االشثاكات The type of the subscript is often a sub-range of integers. ً ً ً فرعيا من األعداد الصحيحة غالبا ما يكون نوع الرمز المنخفض نطاقا 6.5.2 Subscript Bindings and Array Categories The binding of subscript type to an array variable is usually static, but the subscript value ranges are sometimes dynamically bound. ً ً.ديناميكيا يف بعض األحيان لكن نطاقات القيمة المنخفضة تكون مرتبطة، عادة ما يكون ربط النوع المنخفض بمتغي مصفوفة ثابتا Categories of arrays – There are four categories of arrays, based on the binding to subscript ranges, the binding to storage, and rom where the storage is allocated. ً ، توجد أربــع فئات من المصفوفاتrom.حيث يتم تخصيص التخزين – و، والربط بالتخزين، بناء عىل االرتباط بنطاقات منخفضة Static Array is one in which the subscript ranges are statically bound, and storage allocation is static (done before run time). ً ويكون تخصيص التخزين ثابتا (يتم ذلك قبل وقت، ه عبارة عن مجموعة تكون فيها النطاقات المنخفضة مرتبطة بشكل ثابت المصفوفة الثابتة ي.)التشغيل A fixed stack-dynamic array is one in which the subscript ranges are statically bound, but the allocation is done at elaboration time during execution. ن ولكن يتم التخصيص يف وقت التفصيل أثناء، الت تكون فيها النطاقات المنخفضة مرتبطة بشكل ثابت ه ي المصفوفة الديناميكية المكدسة الثابتة ي.التنفيذ A fixed heap-dynamic array is similar to fixed stack-dynamic in which the subscript ranges are dynamically bound, and the storage allocation is dynamic, but they are both fixed after storage is allocated (i.e., binding is done when requested and storage is allocated from heap, not stack) ويكون تخصيص التخزين ديناميك ًيا، ديناميكيا ً الديناميك الثابت حيث تكون النطاقات المنخفضة مرتبطة ي الديناميك الثابت يشبه المكدس ي لصفيف ) وليس المكدس، يتم الربط عند الطلب ويتم تخصيص التخزين من الكومة، لكن كالهما ثابت بعد تخصيص التخزين (أي، A heap-dynamic array is one in which the subscript ranges are dynamically bound, and the storage allocation is dynamic, and can change any number of times during the array’s lifetime. ً ويمكن أن، ديناميكيا ً ويكون تخصيص التخزين، ديناميكيا ه الصفيف الذي تكون فيه النطاقات المنخفضة مرتبطة المصفوفة الديناميكية الكومة ي.يتغث أي عدد من المرات خالل عمر الصفيف ر 6.5.3 Array Initialization Some language allow initialization at the time of storage allocation..تسمح بعض اللغات بالتهيئة يف وقت تخصيص التخزين – Usually just a list of values that are put in the array in the order in which the array elements are stored in memory. ً –.الت يتم وضعها ن يف المصفوفة بالثتيب الذي يتم به تخزين عنارص المصفوفة ن يف الذاكرة ي القيم من قائمة مجرد تكون ما عادة C, C++, Java, and C# allow initialization of their arrays. Consider the following C declaration: تسمحC وC ++ وJava وC # ضع يف اعتبارك إعالن.بتهيئة مصفوفاتهمC التاىل ي int list [] = {4, 5, 7, 83} – The compiler sets the length of the array. –.يحدد المثجم طول المصفوفة Character Strings in C & C++ are implemented as arrays of char. These arrays can be initialized to string constants, as in يتم تنفيذ سالسل األحرف يفC & C ++ كمصفوفات منchar. كما يف، يمكن تهيئة هذه المصفوفات إىل ثوابت السلسلة char name [] = “Freddie”; //how many elements in array name? – The array will have 8 elements because all strings are terminated with a null character(zero), which is implicitly supplied by system for string constants. ً –.ضمنيا من قبل النظام لثوابت السلسلة توفثه والذي يتم ر، )تنته بحرف فارغ (صفر عنارص ألن جميع السالسل8 سوف تحتوي المصفوفة عىل ي Arrays of strings in C and C++ can also be initialized with string literals. For example, ً يمكن أيضا تهيئة مصفوفات السالسل يفC وC ++ ، فمثال.بسلسلة حرفية char *names [] = {″Bob″, ″Jake″, ″Darcie″]; 6.5.4 Array Operations The most common array operations are assignment, catenation, ً comparison for equality and inequality, and slices..ه التخصيص والتسلسل والمقارنة للمساواة وعدم المساواة والشائح أكي عمليات المصفوفة شيوعا ي The C-based languages do not provide any array operations, except thought methods of Java, C++, and C#. ال توفر اللغات المستندة إىلC باستثناء طرق التفكي يف، أي عمليات مصفوفةJava وC ++ وC #. Perl supports array assignments but does not support comparisons. تدعمPerl.تعيينات المصفوفات ولكنها ال تدعم المقارنات Python’s arrays are called lists, although they have all the characteristics of dynamic arrays. Because the objects can be of any types, these arrays are heterogeneous. Python’s array assignments, but they are only reference changes. Python also supports array catenation and element membership operations ً. عىل الرغم من أنها تتمتع بجميع خصائص المصفوفات الديناميكية، القوائم تسىم مصفوفاتPython نظرا ألن الكائنات يمكن أن تكون من أي نوع ً تعيينات مصفوفة. فإن هذه المصفوفات غي متجانسة،Python تدعم. لكنها مجرد تغييات مرجعية،Python أيضا عمليات تسلسل المصفوفات وعضوية العنارص Ruby also provides array catenation ً روب أيضا سلسلة مصفوفة يوفر ر ي APL provides the most powerful array processing operations for vectors and matrixes as well as unary operators (for example, to reverse column elements) يوفرAPL ) لعكس عنارص العمود، أقوى عمليات معالجة الصفيف للمتجهات والمصفوفات وكذلك المشغلي األحاديي (عىل سبيل المثال 6.5.5 Slices A slice of an array is some substructure of an array..ه بنية فرعية لمصفوفةشيحة المصفوفة ي It is a mechanism for referencing part of an array as a unit. إنها آلية لإلشارة إىل جزء من مصفوفة كوحدة If arrays cannot be manipulated as units in a language, that has no use for slices. Slices are only useful in languages that have array operations. الت تحتوي الشائح مفيدة فقط يف اللغات ي. فال فائدة من ذلك للشائح، إذا كان ال يمكن معالجة المصفوفات كوحدات يف لغة.عىل عمليات مصفوفة Python vector = [2, 4, 6, 8, 10, 12, 14, 16] mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] vector (3:6) is a three-element array, which is [8, 10, 12] mat[0:2] is the first and second element of the first row of mat, which is [1, 2] 6.6 Associative Arrays An associative array is an unordered collection of data elements that are indexed by an equal number of values called keys..متساو من القيم تسىم المفاتيح ٍ ه مجموعة غي مرتبة من عنارص البيانات المفهرسة بعدد المصفوفة اليابطية ي – So each element of an associative array is in fact a pair of entities, a key and a value. –.لذا فإن كل عنرص من عنارص المصفوفة الثابطية هو ن يف الواقع زوج من الكيانات ومفتاح وقيمة Associative arrays are supported by the standard class libraries of Java, C++, C#, and F#. يتم دعم المصفوفات اليابطية بواسطة مكتبات الفئات القياسية يفJava وC ++ وC # وF #. – Example: In Perl, associative arrays are often called hashes. Names begin with %; literals are delimited by parentheses. Hashes can be set to literal values with assignment statement, as in – Subscripting is done using braces and keys. So an assignment of 58850 to the element of %salaries with the key “Perry” would appear as follows: Python’s associative arrays, which are called dictionaries, are similar to those of Perl, except the values are all reference to objects. المصفوفات اليابطية يفPython تشبه تلك الموجودة يف، والت تسىم قواميس ي،Perl باستثناء أن القيم كلها مراجع للكائنات، PHP’s arrays are both normal arrays and associative array. مصفوفاتPHP.عبارة عن مصفوفات عادية ومصفوفة ارتباطية 6.7 Record Types A record is a possibly heterogeneous aggregate of data elements in which the individual elements are identified by names. السجل عبارة عن مجموعة غي متجانسة محتملة من عنارص البيانات يتم فيها تحديد العنارص الفردية باألسماء In C, C++, and C#, records are supported with the struct data type. In C++, structures are a minor variation on classes. ً ً فCو يC ++ وC # يف لغة. يتم دعم السجالت بنوع البيانات الهيكلية،C ++. تعد الهياكل اختالفا طفيفا يف الفئات، 6.7.1 Definitions of Records The fundamental difference between a record and an array is that record elements, or fields, are not referenced by indices. Instead, the ً fields are named with identifier, and references to the fields are made using these identifiers. تتم تسمية، بدال من ذلك.األساس بي السجل والمصفوفة يف أن عنارص السجل أو الحقول ال تتم اإلشارة إليها بواسطة الفهارس ي يتمثل االختالف. ويتم عمل المراجع إىل الحقول باستخدام هذه المعرفات، الحقول بالمعرف The COBOL form of a record declaration, which is part of the data division of a COBOL program, is illustrated in the following example: ً والذي يعد، إلقرار السجلCOBOL ف المثال التاىل، يتم توضيح نموذجCOBOL جزءا من قسم البيانات رلينامج ي ي COBOL uses level numbers to show nested records; others use recursive definition يستخدمCOBOL أرقام المستوى إلظهار السجالت المتداخلة ؛ يستخدم البعض اآلخر تعريف متكرر – The numbers 01, 02, and 05 that begin the lines of the record declaration are level numbers, which indicate by their relative values the hierarchical structure of the record. – الهرم للسجل ي تشث بقيمها النسبية إىل الهيكل والت ر ي، ه أرقام مستوى ي05 و02 و01 األرقام الت تبدأ سطور إعالن السجل ي – The PICTURE clauses show the formats of the field storage locations, with X(20) specifying 20 alphanumeric characters and 99V99 specifying four decimal digits with decimal point in the middle. ً ً أبجديا ً تحدد أربعة أرقام ر – تعرض عباراتPICTURE ن تحدد حيث ، الميدانية التخزين مواقع تنسيقاتX (20) 20 99 و ارقمي احرف V99 عرسية مع عالمة ر.عرسية يف المنتصف 6.8 Tuple Types A tuple is a data type that is similar to a record, except that the elements are not named فيما عدا أنه لم يتم تسمية العنارص، ه نوع بيانات مشابه للسجل المجموعة ي Python – Closely related to its lists, but tuples are immutable ً ً – لكن، ارتباطا وثيقا بقوائمها ترتبطtuple للتغيث ر غث قابلة ر – If a tuple needs to be changed, it can be converted to an array with the list function – فيمكن تحويلها إىل مصفوفة باستخدام وظيفة القائمة، التغيثر إذا احتاجت المجموعة إىل – Create with a tuple literal – Note that the elements of a tuple need not be of the same type – الحظ أن عنارص المجموعة ال يجب أن تكون من نفس النوع – The elements of a tuple can be referenced with indexing in brackets, as in the following: رن كما هو موضح أدناه، قوسي يمكن اإلشارة إىل عنارص المجموعة من خالل الفهرسة ر ن بي – Tuple can be catenated with the plus (+) operator – يمكن ربطTuple )+( بعامل الجمع – They can be deleted with del statement – يمكن حذفها ببيانdel 6.9 List Types Lists were first supported in the first functional programming language..تم دعم القوائم ألول مرة يف أول لغة برمجة وظيفية Python Lists – The list data type also serves as Python’s arrays ً – يعمل نوع بيانات القائمة أيضا كمصفوفاتPython – Unlike Scheme, Common Lisp, ML, and F#, Python’s lists are mutable – عىل عكسScheme وCommon Lisp وML وF # فإن قوائم،Python للتغيث ر قابلة – Elements can be of any type – يمكن أن تكون العنارص من أي نوع – Create a list with an assignment قم بإنشاء قائمة مع مهمة – List elements are referenced with subscripting, with indices beginning at zero – المؤشات من الصفر ر مع بدء، تتم اإلشارة إىل عنارص القائمة بكتابة – List elements can be deleted with del – يمكن حذف عنارص القائمة باستخدامdel 6.10 Pointer and Reference Types A pointer type in which the variables have a range of values that consists of memory addresses and a special value, nil..س ء ال ي، الت تتكون من عناوين الذاكرة وقيمة خاصة نوع المؤش فيه المتغيات لها نطاق من القيم ي The value nil is not a valid address and is used to indicate that a pointer cannot currently be used to reference any memory cell. ً ً صالحا وتستخدم لإلشارة إىل أنه ال يمكن استخدام المؤش ً القيمةnil.حاليا لإلشارة إىل أي خلية ذاكرة ليست عنوانا Pointers are designed for two distinct kinds of uses تم تصميم المؤشات لنوعي متميين من االستخدامات – Provide the power of indirect addressing ر – المباشة غثتوفث قوة العنونة ر ر – Provide a way to manage dynamic memory. A pointer can be used to access a location in the area where storage is dynamically created (usually called a heap) ن ر – المؤش للوصول إىل موقع يف المنطقة حيث يتم إنشاء ًالتخزين يمكن استخدام.توفر طريقة إلدارة الذاكرة الديناميكية ً )ديناميكيا (يسم عادة كومة 6.10.1 Pointer Operations A pointer type usually includes two fundamental pointer operations, assignment and dereferencing. التعيي وإلغاء اإلسناد، عمليت مؤش أساسيتي ي عادة ما يشتمل نوع المؤش عىل Assignment sets a pointer var’s value to some useful address. يعي التعيي قيمة مؤشvarّ.لبعض العناوين المفيدة Dereferencing takes a reference through one level of indirection ً مرجعا من خالل مستوى واحد من المراوغة يأخذ االشتقاق – In C++, dereferencing is explicitly specified with the (*) as a prefix unary operation. ن – ++ يف لغةC. يتم تحديد إلغاء اإلشارة بشكل رصي ــح باستخدام (*) باعتباره عملية أحادية البادئة، – – If ptr is a pointer var with the value 7080, and the cell whose address is 7080 has the value 206, then the assignment – إذا كانت-ptr مؤشعبارة عن رvar فإن التخصيص، 206 لها القيمة7080 وكانت الخلية الت عنوانها، 7080 بقيمة ي 6.11 Type Checking Type checking is the activity of ensuring that the operands of an operator are of compatible types. فحص النوع هو نشاط التأكد من أن معامالت المشغل من أنواع متوافقة A compatible type is one that is either legal for the operator, or is allowed under language rules to be implicitly converted, by compiler-generated code, to a legal type. ً ُ ً عن طريق رمز تم، ضمنيا أو يسمح به بموجب قواعد اللغة ليتم تحويله، قانونيا للمشغل النوع المتوافق هو النوع الذي يكون إما.قانوب ي إىل نوع، إنشاؤه بواسطة الميجم This automatic conversion is called a coercion. ئ.التلقاب باإلكراه ي يسىم هذا التحويل – Ex: an int variable and a float variable are added in Java, the value of the int variable is coerced to float and a floating-point is performed. A type error is the application of an operator to an operand of an inappropriate type..نوع الخطأ هو تطبيق عامل عىل معامل من نوع غي مناسب – Ex: in C, if an int value was passed to a function that expected a float value, a type error would occur (compilers did not check the types of parameters) If all type bindings are static, nearly all type checking can be static.. فيمكن أن تكون جميع عمليات التحقق من النوع ثابتة، إذا كانت جميع روابط النوع ثابتة If type bindings are dynamic, type checking must be dynamic and done at run-time. ً.ديناميكيا ويتم إجراؤه يف وقت التشغيل فيجب أن يكون فحص النوع، إذا كانت روابط النوع ديناميكية Summary A data type defines ً a collection of data values and a set of predefined operations on those values ّ يعرف نوع البيانات مجموعة من قيم البيانات ومجموعة من العمليات المحددة مسبقا عىل هذه القيم The primitive data types of most imperative languages include numeric, character, and Boolean types تتضمن أنواع البيانات األولية لمعظم اللغات الحتمية األنواع الرقمية والحروفية والمنطقية The user-defined enumeration and subrange types are convenient and add to the readability and reliability of programs لليامج الفرع المعرفة من قبل المستخدم مالئمة وتضيف إىل قابلية القراءة والموثوقية ر ي تعد أنواع التعداد والمدى An array is a homogeneous aggregate of data elements in which an individual element is identified by its position in the aggregate, relative to the first element بالنسبة للعنرص األول، المصفوفة عبارة عن مجموعة متجانسة من عنارص البيانات يتم فيها تحديد عنرص فردي من خالل موضعه يف التجميع An associative array is an unordered collection of data elements that are indexed by an equal number of values called keys..متساو من القيم تسىم المفاتيح ٍ ه مجموعة غي مرتبة من عنارص البيانات المفهرسة بعدد المصفوفة اليابطية ي – Each element of an associative array is in fact a pair of entities, a key and a value – كل عنرص من عنارص المصفوفة الثابطية هو ن يف الواقع زوج من الكيانات ومفتاح وقيمة There are four categories of arrays, based on the binding to subscript ranges, the binding to storage, and rom where the storage is allocated. ً ، توجد أرب ع فئات من المصفوفاتrom حيث يتم تخصيص التخزين و، والربط بالتخزين، بناء عىل االرتباط بالنطاقات المنخفضة – Static array: as in C++ array whose definition includes the static specifier – Fixed stack-dynamic array: as in C function (without the static specifier) – Fixed heap-dynamic array: as with Java’s objects – Heap dynamic array: as in Java’s ArrayList and C#'s List Tuples are similar to records, but do not have names for their constituent parts. They are part of Python, ML, and F#. Python’s tuples are closed to lists, but immutable إنها جزء من. ولكنها ال تحتوي عىل أسماء لألجزاء المكونة لها، تتشابه المجموعات مع السجالتPython وML وF #. يتم إغالق مجموعات Python لكنها غي قابلة للتغيي، يف القوائم Lists are staples of the functional programming languages, but are now also included in Python and C#. Python’s lists are mutable ً ولكنها اآلن مدرجة أيضا يف، اليمجة الوظيفيةه العنارص األساسية للغات رالقوائم يPython وC #. قوائم بايثون قابلة للتغيي A pointer type in which the variables have a range of values that consists of memory addresses and a special value, nil سء ال ي، الت تتكون من عناوين الذاكرة وقيمة خاصة نوع المؤش فيه المتغيات لها نطاق من القيم ي – Pointers are used for addressing flexibility and to control dynamic storage management المؤشات لمعالجة المرونة والتحكم ن ُ – الديناميك ي التخزين إدارة في ر ستخدم ت – Pointers have some inherent dangers: dangling pointers are difficult to avoid, and memory leakage can occur Reference types, such as those in Java and C#, provide heap management without the danger of pointers مثل تلك الموجودة يف، توفر أنواع المراجعJava وC # إدارة الكومة دون التعرض لخطر المؤشات، Strong typing is the concept of requiring that all type errors be detected ه مفهوم طلب الكشف عن جميع أخطاء الكتابة الكتابة القوية ي The type equivalence rules of a language determine what operations are legal among the structured types of a language تحدد قواعد تكافؤ النوع للغة العمليات القانونية بي األنواع المهيكلة للغة CIS217 CONCEPTS OF PROGRAMMING LANGUAGES CHAPTER-7 Expressions and Assignment Statements Outline Introduction Arithmetic Expressions Overloaded Operators Type Conversions Relational and Boolean Expressions Short-Circuit Evaluation Assignment Statements Mixed-Mode Assignment Introduction Expressions are the fundamental means of specifying computations in a programming language. To understand expression evaluation, need to be familiar with the orders of operator and operand evaluation. Essence of imperative languages is dominant role of assignment statements. Arithmetic Expressions Their evaluation was one of the motivations for the development of the first programming languages. Most of the characteristics of arithmetic expressions in programming languages were inherited from conventions that had evolved in math..اللغات األولى#.كان تقييمهم أحد الدوافع لتطوير لغات البرمجة األولى Arithmetic expressions consist of operators, operands, parentheses, معظمand function calls. sofarithmeticexpressionsinprogramminglanguageswereinالشخصيات An operator can be unary, meaning it has a single operand, binary, meaning it has two operands, or.heritedfrom conventions that had evolved in math ternary, meaning it has three operands.. واملكاملات الوظيفية، األقواس، املشغلني، التعبيرات الحسابيةتتكون من املشغلني An implementation of such a computation must cause two actions: – Fetching the operands from memory Anoperatorcanbeunary، معنىithasasingleoperand، ،ثنائي معنىithastwooperands، أو – Executing the arithmetic operations on those operands.. يعني أنه يحتوي على ثالثة معامالت،ثالثي : تنفيذ مثل هذا الحسابيجب أن يسبب إجراءين.– جلب املعامالت من الذاكرة.– تنفيذ العمليات الحسابية على تلك املعامالت Design issues for arithmetic expressions: What are the operator precedence rules? What are the operator associativity rules? What is the order of operand evaluation? Are there restrictions on operand evaluation side effects? Does the language allow user-defined operator overloading? What mode mixing is allowed in expressions? Operator Evaluation Order أمر تقييم املشغل 1. Precedence – The operator precedence rules for expression evaluation define the order in which “adjacent” operators of different precedence levels are evaluated (“adjacent” means they are separated by at most one operand). أسبقية.1 – Typical precedence levels: 1. parentheses تحدد قواعد أسبقية املشغل لتقييم التعبير الترتيب الذي يتم به تقييم املشغلني- 2. unary operators "املجاورا" من مستويات األسبقية املختلفة )"املجاورا" يعني أنهم مفصولون 3. ** (if the language supports it).(بمعامل واحد على األكثر 4. *, / : مستويات األسبقية النموذجية- 5. +, - األقواس.1 املشغلون األحاديون.2 ( ** )إذا كانت اللغة تدعمها.3 Operator Evaluation Order أمر تقييم املشغل.تتضمن العديد من اللغات أيضا تحويالت غير عقابية من اإلضافة والطرح Many languages also include unary versions of addition and subtraction. Unary addition (+) is called the identity operator because it usually has no associated operation and thus has no effect on its operand. Unary minus operator (-) Ex: ( مشغل الهوية ألنه عادة ما ال يكون له عمل+) تسمى اإلضافة غير الظاملفصلة.مرتبط وبالتالي ليس له أي تأثير على معاملته أمر تقييم املشغل Operator Evaluation Order 2. Associativity – The operator associativity rules for expression evaluation define the order in which adjacent operators with the same precedence level are evaluated. An operator can be either left or right associative. Typical associativity rules: – Left to right, except **, which is right to left – Sometimes unary operators associate right to left (e.g., FORTRAN) ::قواعد االرتباط النموذجية وهو من اليمني إلى اليسار،** باستثناء، من اليسار إلى اليمني- ( فورتران، في بعض األحيان يرتبط املشغلون األحاديون من اليمني إلى اليسار )على سبيل املثال- اﻻرﺗﺒﺎطﯿﺔﯾﺔ.2 ﺗﺤﺪد ﻗﻮاﻋﺪ ارﺗﺒﺎط اﻟﻤﺸﻐﻞ ﻟﺘﻘﯿﯿﻢ اﻟﺘﻌﺒﯿﺮ اﻟﺘﺮﺗﯿﺐ اﻟﺬي ﯾﺘﻢ ﺑﮫ ﺗﻘﯿﯿﻢ اﻟﻤﺸﻐﻠﯿﻦ- ﯾﻤﻜﻦ أن ﯾﻜﻮن اﻟﻤﺸﻐﻞ إﻣﺎ ﻣﺮﺗﺒﻄﺎ.اﻟﻤﺠﺎورﯾﻦ اﻟﺬﯾﻦ ﻟﺪﯾﮭﻢ ﻧﻔﺲ ﻣﺴﺘﻮى اﻷﺳﺒﻘﯿﺔ.ﯾﺴﺎرا أو ﯾﻤﯿﻨﺎ Operator Evaluation Order يمكن تجاوز قواعد األسبقية والترابط بني قوسني NOTE: Precedence and associativity rules can be overridden with parentheses Operator Evaluation Order 3. Parentheses – Programmers can alter the precedence and associativity rules by placing parentheses in expressions. A parenthesized part of an expression has precedence over its adjacent un-parenthesized parts. بني قوسني.3 يمكن للمبرمجني تغيير األسبقية وقواعد الترابط عن طريق وضع األقواس في-.تعبيرات Operator Evaluation Order التعبيرات املشروطة.4 4. Conditional Expressions. إلجراء تعيني تعبير مشروطif-then-else في بعض األحيان يتم استخدام عبارات- – Sometimes if-then-else statements are used to perform a conditional expression assignment. if (count == 0) average = 0; else هل تالحظ ذلك؟ يستخدم في التعبير الشرطي. يمكن تحديد ذلك بشكل أكثر مالءمة في عبارة التعيني باستخدام تعبيرات مشروطة،IntheC اللغات القائمة على average = sum / count;.( معامالت3) كمشغل ثالثي In the C-based languages, this can be specified more conveniently in an assignment statement using a conditional expressions. Note that ? is used in conditional expression as a ternary operator (3 operands). expression_1 ? expression_2 : expression_3 Ex: average = (count == 0) ? 0 : sum / count; :العملية Operand evaluation order. ما عليك سوى جلب القيمة من الذاكرة: املتغيرات.1. أحيانا جلب من الذاكرة؛ وأحيانا يكون الثابت في تعليم لغة اآللة: الثوابت.2 The process: 1. Variables: just fetch the value from memory.. تقييم جميع املعامالت واملشغلني أوال: التعبيرات بني قوسني.3 2. Constants: sometimes a fetch from memory; sometimes the constant is in the machine language instruction. 3. Parenthesized expressions: evaluate all operands and operators first. Side Effects اآلثار الجانبية لآلثار – A side effect of a function, called a functional side effect, occurs when the function changes عندما، تسمى التأثير الجانبي الوظيفي، يحدث أحد اآلثار الجانبية للدالة- either one of its parameters or a global variable. تتغير الوظيفة Ex:.إما أحد معامله أو متغير عاملي – If fun does not have the side effect of changing a, then the order of evaluation of the two operands, a and fun(a), has no effect on the value of the expression. :على سبيل املثال. ليس له أي تأثير على قيمة التعبير،fun(a) وa ، فإن ترتيب تقييم املعاملني،a إذا لم يكن للمتعة اآلثار الجانبية لتغيير- Operand evaluation order أمر تقييم العمل ويغير معلمته إلى2 يعيد املرح قيمة حجته مقسوما على:ضع في اعتبارك املوقف التالي. فهناك تأثير، إذا تغيرت املتعة،ومع ذلك However, if fun changes a, there is an effect. : و،20 لديك القيمة Ex: – Consider the following situation: fun returns the value of its argument divided by 2 and changes its parameter to have the value 20, and:.15 وقيمة التعبير هي10 فإن قيمتها هي،( أوال )في عملية تقييم التعبيرa إذا تم إرجاع قيمة.25 وقيمة التعبير هي20 فإن قيمة املعامل األول هي، ولكن إذا تم تقييم الثاني أوال- : الحلول القابلة لاللتفاف: الحل – If the value of a is returned first (in the expression evaluation process), its value is 10 and the value of the expression is 15. اكتب تعريف اللغة لعدم السماح باآلثار الجانبية الوظيفية.1 – But if the second is evaluated first, then the value of the first operand is 20 and the value of the expression is 25.. ال توجد معلمات ثنائية االتجاه في الوظائف Solution: Two possible solutions: 1. Write the language definition to disallow functional side effects. ال توجد مراجع غير محلية في الوظائف No two-way parameters in functions. يريد املبرمجون مرونة املعلمات ثنائية االتجاه )ماذا عن: العيب No non-local references in functions..؟( واملراجع غير املحليةC Disadvantage: Programmers want the flexibility of two-way parameters (what about C?) and non-local references.