موضة

لغة الجنة. تطوير لغة تكيفية لنظام البرمجة التفاعلية dsp. الترجمات المقدسة والدنس

لغة الجنة.  تطوير لغة تكيفية لنظام البرمجة التفاعلية dsp.  الترجمات المقدسة والدنس

1. هذه قصة عن كيف توقف الناس عن فهم بعضهم البعض وظهرت العديد من لغات العالم الحديث. ما مدى انتشار هذه الأسطورة بين مختلف الشعوب وما هي تفسيراتها؟

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

الإجابة على السؤال الأول موجودة في تكوين 11: 1-9 من العهد القديم ، حيث قيل أن الله قرر معاقبة الجنس البشري بوضعه عليه لعنة تشويش الألسنة. يمكن العثور على إجابة السؤال الثاني في تكوين 2:19. في هذا الجزء ، أحضر الله جميع الحيوانات والطيور إلى آدم ليسمع كيف يسميها آدم ، و "كما يدعو الإنسان كل كائن حي ، كان هذا اسمه". ستسمح لنا الجولة الثقافية المرتجلة بمعرفة كيفية تغطية هذه القضايا. فيما يتعلق بالجزء الأول ، يتفق الكثيرون مع العهد القديم: تنوع الألسنة هو عقاب الرب ، أو على الأقل نتيجة لبعض العوامل غير المواتية.

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

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

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

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

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

اللغة هي نظام إشارة يسمح لك بالانتقال من معنى ومعنى المفهوم إلى تسميته.

الإنسان كائن لفظي ، وعلى عكس الحيوانات ، يتواصل مع نوعه بمساعدة اللغة. يتحدثون أحيانًا عن "لغة الحيوانات" ، لكن من الواضح أن مثل هذا التعبير مشروط - في ثرائها وقدراتها ، فإن لغة الحيوانات لا تشبه لغة الإنسان. الملائكة ، لتواصلهم ، لا يحتاجون إلى لغة على الإطلاق - من الصعب تخيلهم يتحدثون الروسية أو الإنجليزية.

يمكن أن تكون وظائف اللغة مختلفة - فبالإضافة إلى نقل المعلومات ، فهي تساعد في التعبير عن المشاعر والتقييمات.

هل يمكن ترجمة الكتاب المقدس؟

لغة الكنيسة هي لغة الصلاة والعبادة والكتاب المقدس.

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

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

في القرن الثالث قبل الميلاد. ما يسمى ب "ترجمة السبعين" - الترجمة السبعينية - ترجمة العهد القديم إلى اليونانية. علاوة على ذلك ، يعتقد بعض الباحثين أن السبعينية هي التي لعبت دور الكتاب المقدس في العصور بين الأعراف.

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

الآن هناك اتجاه علمي - إعادة بناء لغوية. المترجمون يحاولون فهم كيف بدت هذه الحوارات في الأصل. ومع ذلك ، لا يزال موضوع الدراسات العلمية.

هل هي في الجنةبارد؟

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

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

هل فهم كل السلاف الكتاب المقدس؟

لم يتم إحضار الكتاب المقدس إلى أسلافنا باللغة الروسية. طور سيريل وميثوديوس - اليونانيون في تسالونيكي - لغة مكتوبة جديدة تعتمد على اللغة المنطوقة لسلاف تسالونيكي.

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

إذا افترضنا أنه منذ عدة آلاف من السنين كان من الأسهل على القبائل السلافية الاتفاق فيما بينها مقارنة بالشعوب السلافية الحديثة ، فسنكون على صواب - فاللغات كانت أقرب. لكن هذا لا يعني أن ترجمة الكتاب المقدس التي قام بها سيريل وميثوديوس كانت أكثر قابلية للفهم لشعب كييف ونوفغورود - كانت اللغة الأدبية المكتوبة مختلفة.

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

في بعض الأحيان كانت النظائر الروسية القديمة تندلع تمامًا - "جيد" و "بولوغو" في اسم "بولولو" ؛ "خوذة" ، والتي هي فقط في الملاحم ، على عكس "الخوذة".

اللغات قريبة و ... موازية

في روس القديمة كان هناك حالة ازدواجية اللغة. ليست هذه هي "ثنائية اللغة". Diglossia هو استخدام لغتين بالتوازي في المجتمع. على سبيل المثال ، في القرن التاسع عشر تم استخدام اللغتين الروسية والفرنسية. كانت الفرنسية هي لغة المجتمع الراقي ، ولكن ، من حيث المبدأ ، يمكن ترجمة أي نص.

في ازدواجية اللغة ، لا تتقاطع اللغات من حيث الاستخدام. كانوا يتحدثون الروسية القديمة ، وكان بإمكانهم كتابة ملاحظة منزلية باللغة الروسية القديمة. لكنهم صلوا في الكنيسة السلافية.

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

كاهن أم قس؟

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

في العهد السوفياتي ، أصبح الجميع متعلمين ، لكن لم يكن هناك نص من الكتاب المقدس.

الآن لا يزال محو الأمية محفوظًا والنصوص متاحة.

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

فانتقلت عبارة "أنا الراعي الصالح" إلى الترجمة. وهنا بعض الصعوبات. قد تبدو الترجمة الحرفية من اليونانية: "أنا راعي جيد" ، لكن مثل هذه الترجمة تعتبر منخفضة. من ناحية أخرى ، فإن المستمع البسيط الآن سوف ينظر إلى "القس" الجليل على أنه "كاهن". ومع ذلك ، يجب الاعتراف بأن الترجمة الحرفية إلى اللغة الروسية للعديد من الأقوال التوراتية مستحيلة - لن يُنظر إلى عبارة "فم الطفل يتكلم الحقيقة" على أنها قول فلسفي.

لكن بشكل عام ، فإن فهم النص السلافي للكتاب المقدس يعوقه سوء فهم المعنى ، وليس الكلمات.

الصعوبة المنفصلة هي التراكيب النحوية. على سبيل المثال ، هناك عدد من التضخمات التي تأتي من اليونانية. "اغفر الذنوب والمعاصي" يعني ببساطة ، اغفر كل الذنوب. تتشابه تكوينات النوع "الغاضب من الغضب" ، "المحبوب بالحب".

عند ترجمة النصوص المقدسة إلى لغات أخرى ، تظهر المشاكل أيضًا (على الرغم من أن الشعوب التي لم تُترجم الكتب المقدسة إلى لغاتها قد تكون 5℅ من سكان الأرض). أي أن العمل الذي قام به سيريل وميثوديوس للسلاف مستمر.

لم يكن سيريل وميثوديوس الأولين - قبل ذلك كانت هناك ترجمات إلى الإثيوبية والقوطية. بعد كيرلس وميثوديوس ، ترجم ستيفان بيرم الكتب المقدسة إلى اللغة الزورية.

الترجمات المقدسة والدنس

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

حتى أن هناك تيارات بروتستانتية حديثة تعتقد أن النص الكتابي يجب أن يكون في متناول الجميع. كما تم نشر الرسوم الهزلية التوراتية.

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

في النسخة الحديثة ، سيكون من الجيد الحصول على ترجمتين - كلاهما من النصوص الماسورية العبرية ومن اليونانية. سيكون مناسبًا لأولئك الذين لا يعرفون كلتا اللغتين.

إجابات على الأسئلة

بعد الخطاب ، سُئل رئيس الكهنة ألكسندر عدة أسئلة:

ما هي اللغة التي تحدث بها آدم؟

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

لكن ، على أي حال ، ربما كانت لغة آدم مختلفة عن أي لغة موجودة ، بما في ذلك اللغة العبرية.

هل هناك جدل حول ترجمة الخدمة إلى اللغة الروسية الآن؟

- نوقشت هذه الفكرة حتى قبل الثورة ، وقد تم التنازل عنها جزئيًا من قبل التجديد. لم يخدموا جميعًا باللغة الروسية ، لكن الفكرة كانت مدعومة من قبلهم.

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

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

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

كانت هذه العملية مستمرة بشكل عفوي لفترة طويلة. في بعض الأحيان تنشأ الحوادث: على سبيل المثال ، في "طقوس الزفاف" ، يتم أحيانًا استبدال الرقم المزدوج بشكل غير متوقع بالجمع ، وفي المذهبين الحديثين يتم استخدامه بشكل غير متسق.

كيف تشارك العناية الإلهية في تكوين لغات مختلفة؟

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

تمت ترجمة Cyril و Methodius إلى الكنيسة السلافية من خلال الإلهام من الأعلى ، ولكن أيضًا من خلال النموذج الذي كان موجودًا في ذلك الوقت.

بالإلهام من الأعلى ، وبتدوين الأناجيل باليونانية ، وضع الرسل الأساس لفكرة ترجمة الإنجيل.

من إعداد داريا منديليفا

تصوير ديمتري كوزمين

تطوير لغة تكيفية PARA لنظام البرمجة التفاعلية DSSP جامعة موسكو الحكومية للرياضيات الحاسوبية وعلم التحكم الآلي N.P. Brusentsov، V.B. Zakharov، I.A.

الوصف العام للغة PARA

الغرض والغرض من تطوير اللغة

PARA (لغة تكيفية متطورة) هي اللغة الأساسية لنظام المحادثة DSSP للبرمجة المهيكلة. أساسي - يعني أن تكون الأساس لجميع الإنشاءات الإضافية التي يتم تنفيذها في DSSP من خلال تطوير (توسيع وتقوية) اللغة الأساسية ، وربما تكييف أدوات اللغة التي تم إنشاؤها بهذه الطريقة مع تطبيق معين. على عكس ما يسمى باللغات عالية المستوى ، لا توفر PARA أنواعًا وعمليات بيانات جاهزة ، ولكن فقط العناصر والأوليات لتحديد الأنواع المطلوبة بكفاءة. على سبيل المثال ، تنسيقات البيانات الأصلية هي 8 بت بايت ، وكلمة 16 بت ، وكلمة طويلة 32 بت ، والتي يتم تفسيرها اعتمادًا على العمليات التي يتم إجراؤها عليها كأعداد صحيحة ومتجهات منطقية ورموز الأحرف والقيم المنطقية والبيانات والإجراءات المؤشرات. في هذه الحالة ، من الممكن ، من ناحية ، معالجة وحدات البايت الفردية والكلمات ، ومن ناحية أخرى ، تكوين وحدات بيانات مركبة (كلمات ذات أطوال متعددة ، ونواقل ، ومصفوفات ، وخطوط نصية ، وما إلى ذلك) ، وضع تفسير واحد أو آخر لهم إدخال العمليات المناسبة. لذلك ، يمكن تقديم الأرقام الحقيقية للطول المطلوب ونطاق القيم والأرقام المركبة والكائنات الأخرى ، وسيشمل إصدار اللغة الذي يركز على تطبيق معين كائنات ووسائل متأصلة في هذا التطبيق ولن يتضمن ما لا ينطبق له - اللغة سوف تتكيف (تتكيف) مع التطبيق. كان تطوير DSSP يهدف إلى إنشاء أداة برمجة حاسوب دقيق متاحة على نطاق واسع وفعالة ، أي أجهزة كمبيوتر تعتمد على المعالجات الدقيقة. من السمات الأساسية لبنية المعالجات الدقيقة الطبيعة الأولية لأنواع البيانات والعمليات ، مما يعني ، من ناحية ، العالمية ، ومن ناحية أخرى ، تعقيد البرمجة. نظرًا لتعدد استخداماتها ، فإن المعالجات الدقيقة وأجهزة الكمبيوتر الصغيرة القائمة عليها لها تطبيقات لا حدود لها. ومع ذلك ، فإن التنفيذ العملي لهذه الاحتمالات يعتمد في المقام الأول على تعقيد تطوير برامج التطبيق اللازمة. بالإضافة إلى ذلك ، لا يمكن إنشاء برامج التطبيق المرضية إلا بمعرفة عميقة ودقيقة بخصائص التطبيقات المعنية ، أي يجب تطويرها ليس فقط من قبل المبرمجين ، ولكن من قبل المتخصصين المؤهلين تأهيلا عاليا في مجال معين. لذلك ، يجب ألا يزيد نظام البرمجة من إنتاجية المبرمجين إلى حد كبير فحسب ، بل يجب أيضًا أن يكون بسيطًا جدًا بحيث يمكن إتقانه واستخدامه بشكل فعال من قبل المبرمجين غير المحترفين.

سيكون الحل الجذري لهذه المشكلة ، على ما يبدو ، تبسيطًا هامًا لهندسة الكمبيوتر. ولكن ، لسوء الحظ ، فإن بنية الحواسيب الصغيرة تتطور في اتجاه معاكس تمامًا - على طول مسار التعقيد والتطور المتزايد ، لذلك ليس من السهل على المبرمج المحترف إتقان لغة تجميع الحواسيب الصغيرة اليوم. لقد قللت لغات برمجة الأنظمة مثل C أو PL / M من تعقيد تطوير البرامج إلى حد معين (على الرغم من أنها بعيدة عن أن تكون كافية) ، ولكن يصعب التوصية بها للأشخاص الذين ليس لديهم خبرة في تجارة البرمجة. يجب أن تكون اللغة التي يمكن الوصول إليها على نطاق واسع ، بالطبع ، أبسط وأكثر طبيعية ، ويجب أن تستند إلى الأفكار الأكثر شيوعًا والمألوفة حول جوهر وتقنية البرمجة.

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

البرمجة الإجرائية

تشبه البرمجة بلغة PARADISE إلى حد بعيد الأنواع المنتشرة من النشاط البشري مثل تخطيط وتنظيم الإجراءات أو الأعمال أو العمليات المترابطة أو تصميم كائنات مادية معقدة - آلات ، مجاميع ، هياكل. مثل المُنشئ الذي ينفذ فكرته من خلال تجميع الأجزاء المكونة له (الكتل والتجمعات والأجزاء) ، يقوم المبرمج بتجميع الإجراء المعقد المطلوب من الإجراءات البسيطة التي توفرها اللغة. يمكن القول أيضًا أن البرمجة (الإنشاء) تتكون من التحلل التدريجي (التحلل) للكائن المنفذ إلى مكونات أصغر وأصغر.

في لغة الجنة ، "البناء" الرئيسي هو إجراء - إجراء مسمى. اللغة مبنية على مجموعة محدودة من أبسط الإجراءات (البدائية) ممثلة بأسمائهم (الرموز). على سبيل المثال: + تعني "إضافة" ، NEG تعني "إشارة عكسية" ، VCTR تعني "إنشاء متجه". على وجه الخصوص ، هناك الأوليات: و ؛ (النقطتان والفاصلة المنقوطة) ، مما يتيح لك تقديم إجراء جديد ، على سبيل المثال ، يسمى P ، وتعريفه على أنه سلسلة من الإجراءات P1 ، P2 ، ... ، PN في النموذج

: P P1 P2 ... PN ؛

إذا كان الإجراء P يمثل الإجراء الذي يجب أن يقوم به البرنامج الذي تم إنشاؤه ، فسيتم تقليل إنشاء هذا البرنامج عن طريق لغة PARA إلى التفاصيل المتسلسلة للإجراءات P1 ، P2 ، ... ، PN. هذا يعني أنه يجب تحديد كل من هذه الإجراءات من خلال سلسلة من الإجراءات الأصغر ، والتي يتم تحديدها بعد ذلك من خلال متواليات من الإجراءات الأصغر ، وما إلى ذلك ، حتى يتم الحصول على التعريفات التي تتكون من العناصر الأولية فقط.

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

في كلتا الحالتين ، يعد التنظيم الدقيق للبرامج التي يتم إنشاؤها أمرًا ضروريًا: يجب أن يتكون كل برنامج وكل جزء من البرنامج من عدد صغير من الأجزاء المنفصلة ، كل منها يؤدي وظيفة محددة ويسمح بالتحقق المستقل. فيما يتعلق بلغة PARA ، هذا يعني ، على وجه الخصوص ، أن تعاريف الإجراءات يجب أن تكون قصيرة: التسلسل التعريفي ، كقاعدة عامة ، يجب ألا يحتوي على أكثر من 5-7 أعضاء. توفر الهيكلة قابلية الفهم وقابلية الاختبار وقابلية التعديل للبرنامج ، وتقلل بشكل كبير من تعقيد إنشائها وصيانتها.

المثال أعلاه لتعريف الإجراء P هو مثال مبسط. في الواقع ، قد يحتوي التسلسل التعريفي كأعضاء ليس فقط على أسماء الإجراءات ، ولكن أيضًا الوصفات (الأوامر) التي تتكون من أكثر من كلمة واحدة. اسم الإجراء ، المستخدم بدون تركيبة مع كلمات أخرى ، هو أمر لتنفيذ الإجراء المعين من قبله. يرشد تسلسل أسماء الإجراءات إلى تنفيذ هذه الإجراءات بترتيب أسمائها واحدًا تلو الآخر (بترتيب خطي). لتعيين تسلسلات تنفيذ أخرى ، يوفر PARA كلمات خاصة (بادئات) تصف تنفيذ الإجراءات المسماة بالاقتران معها ، اعتمادًا على الشرط المحدد ، بالإضافة إلى التنفيذ المتعدد (الدوري) للإجراء.

على سبيل المثال ، يؤدي التسلسل الخطي P0 P1 إلى تنفيذ الإجراء P0 ثم تنفيذ الإجراء P1. إذا كان الإجراء P1 لا يجب تنفيذه دائمًا ، ولكن فقط إذا تم الحصول على رقم موجب نتيجة لتنفيذ P0 ، فبدلاً من P1 ، يتم كتابة أمر التنفيذ وفقًا للشرط: IF + P1 ، أي بدلاً من P0 P1 ، سيكون P0 IF + P1. يتضمن PARA مجموعة من شروط البادئة التي تسمح لك بالتعبير الفعال عن تنفيذ الشرط ، بالإضافة إلى اختيار إجراءين أو ثلاثة أو أكثر.

يتم تحديد التنفيذ المتعدد للإجراء باستخدام بادئة RP. لذلك ، يتسبب الأمر RP P في تنفيذ الإجراء P مرارًا وتكرارًا حتى يتم إنشاء الشروط التي يتم بموجبها تشغيل EX الموجود في جسم هذا الإجراء - الخروج من الحلقة ، وبعد ذلك يتم تنفيذ الأمر التالي بترتيب خطي . يمكن أن يكون شرط الخروج من الحلقة ، على سبيل المثال ، المساواة إلى الصفر لبعض المتغيرات X ، والتي يتم التعبير عنها على النحو التالي:

الإجراء الذي تم تضمين اسمه في تعريف إجراء آخر يسمى متداخل فيه. قد يحتوي الإجراء المتداخل ، إذا لم يكن إجراءً بدائيًا ، بدوره على إجراءات متداخلة ، أي يمكن أن يكون التعشيش متعددًا. بالإضافة إلى ذلك ، لا تمنع قواعد لغة PARA التضمين في تعريف إجراء باسمها أو اسم إجراء يحتوي على هذا الاسم ، أي يسمح PARA بالعودة.

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

التسلسل الخطي للأوامر ، والتداخل ، والتداخل الشرطي والدوري للإجراءات - هذا يستنفد إمكانيات إنشاء البرامج بلغة RAYA. ندرة هذه الوسائل وتجانسها وطبيعتها هي مفتاح سهولة إتقان اللغة واستخدامها. في الوقت نفسه ، إنها لغة برمجة منظمة صارمة توفر انخفاضًا كبيرًا في تعقيد تطوير البرامج وموثوقيتها.

الإجراءات والبيانات

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

عنصر البيانات البسيط للغاية هو عنصر ذو قيمتين - قليلاً. البتات هي اللبنات الأساسية لجميع تنسيقات وأنواع البيانات الأخرى. في لغة الجنة ، يتم قبول 8 بايت بايت و 16 بت كلمة وكلمة 32 بت طويلة كتنسيقات أساسية. اعتمادًا على العمليات التي يتم إجراؤها عليها ، تخضع البايت والكلمات والكلمات الطويلة للعديد من التفسيرات ، أي يمكن أن تكون بمثابة أساس لأنواع مختلفة من البيانات. بالإضافة إلى ذلك ، فهي العناصر الأولية لتشكيل الأشكال والأنواع المركبة.

في الواقع ، لا تحتوي PARADISE على أنواع بيانات بسيطة أو مركبة - هناك فقط تنسيقات أساسية (بايت ، كلمة ، كلمة طويلة) ووسائل لبناء تنسيقات مركبة منها: المتجهات والمصفوفات متعددة الأبعاد. في هذه الحالة ، نفس البايت (الكلمات ، الكلمات الطويلة) ، اعتمادًا على العمليات التي يتم إجراؤها عليها ، يتم تفسيرها على أنها متجهات بتات ، أو كأعداد صحيحة ثنائية مع أو بدون علامة ، أو كأحرف من أبجدية الإدخال / الإخراج ، إلخ. يمكن تقديم أنواع البيانات والقيود والشيكات المرتبطة بها في امتدادات اللغة الخاصة بالمجال.

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

على سبيل المثال ، إذا كان هناك متغير X تم الإعلان عنه ككلمة طويلة 32 بت ، فيمكن إجراء عمليتين فقط عليه مباشرة:

1) دفع قيمته إلى المكدس ، والذي يحدث تلقائيًا في كل مرة يتم فيها ذكر الاسم X ،

2) إسناد ذلك إلى الفريق! قيمة X للعنصر (العلوي) الأخير الذي سيتم إخراجه من المكدس.

إذا كنت تريد ، على سبيل المثال ، مضاعفة قيمة X بإضافتها إلى نفسها ، فيمكنك القيام بذلك عن طريق تنفيذ الأوامر التالية واحدة تلو الأخرى:

سيتم دفع مثيلين من قيمة X إلى المكدس ، ثم يقوم الأمر + بإزالتها وإضافتها ودفع المقدار الناتج إلى المكدس ، وبعد ذلك الأمر! سوف يسحب X هذا المبلغ ويخصص قيمته للمتغير X.

المعتاد للغات عالية المستوى كتابة المثال المعطى بالصيغة X: = X + X مألوف أكثر للمبرمج ، لكنه ليس انعكاسًا مباشرًا لتسلسل الأوامر التي ينفذها المعالج ، ولكنه يمثل نوع من الصيغة الرياضية. يعد هذا مناسبًا عند برمجة المشكلات الحسابية ، ومع ذلك ، في اللغة الأساسية ، يبدو أن المراسلات الفردية مع الأوامر التي يتم تنفيذها أكثر أهمية ، حيث يمكن التحقق من البرنامج أمرًا تلو الآخر مباشرة في لغة البرمجة و بشكل عام ليس مطلوبًا معرفة لغة أخرى غير لغة المعالج.

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

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

بمعنى آخر ، تُستخدم أسماء الإجراءات في لغة PARA بنفس طريقة استخدام علامات العمليات وهي في الأساس رموز للعمليات مع عدد تعسفي من المعاملات. وفقًا لمبدأ عملية المكدس ، تتم كتابة العمليات في شكل postfix ، أي يتم وضع اسم العملية بعد سرد أسماء أو قيم معاملاتها. على سبيل المثال ، إذا أشرنا إلى عملية الحصول على مجموع ثلاثة أرقام بالرمز ++ ، فسيتم التعبير عن مجموع الأرقام A و 5 و B على النحو التالي:

سيكون من الممكن وضع القواعد الرسمية للغة postfix وأن تسترشد بها عند كتابة البرامج ، ولكن من الأسهل والأكثر موثوقية أن يتعامل الشخص ليس مع القواعد ، ولكن مع نموذج معالج المكدس ، أي مع طراز الجهاز الذي تم إنشاء البرامج من أجله والتي ستقوم بتنفيذها. في حالة لغة PARA ، فإن هذا الجهاز هو معالج DSSP - مجموعة من الأجهزة والبرامج التي تنفذ الإجراءات المنصوص عليها في هذه اللغة.

معالج DSSP

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

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

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

على سبيل المثال ، لتقييم التعبير (2-5) * 3 وعرض النتيجة ، أدخل:

2 5 - 3 * .

بعد الضغط على المفتاح ينتج المعالج النتيجة ، لذلك سيبدو الخط بالكامل

* 2 5 - 3 * . -90

يُصدر المعالج علامة النجمة في بداية السطر كإشارة إلى أنه ينتظر الإدخال.

في المثال المدروس ، أدرك المعالج الأرقام المدخلة ومعالجتها كأعداد صحيحة عشرية. في الواقع ، عند الإدخال ، تم تحويل هذه الأرقام إلى رمز ثنائي مكمل ، وعند الإخراج ، تم تحويلها مرة أخرى إلى رقم عشري. كما يسمح معالج PRSP بأوضاع الإدخال / الإخراج الثنائي والثماني والست عشري. للتبديل إلى الوضع المطلوب ، يجب عليك تنفيذ أحد الأوامر B2 ، B8 ، B10 ، B16 ، على التوالي.

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

معالجة سلسلة الإدخال ، يقوم المعالج باستخراج الكلمات الموجودة فيها - مجموعات من الأحرف مفصولة عن بعضها بمسافات ، ويفسرها. إذا كانت الكلمة التي تتم معالجتها هي اسم عملية (إجراء) أو اسم معين معروف للمعالج ، فحينئذٍ يقوم المعالج بتنفيذ الإجراءات التي ، بحكم التعريف ، يجب أن يطلق عليها هذا الاسم. إذا كانت الكلمة غير معروفة للمعالج ، فإنه يحاول تفسيرها كرقم ، مع مراعاة وضع الإدخال / الإخراج المحدد.

الأرقام هي الكلمات التي تتكون من أرقام مقبولة في نظام أرقام معين ، وربما تحتوي على علامة ناقص كحرف أول. في وضع الإدخال / الإخراج السداسي العشري ، تكون الأحرف اللاتينية A و B و C و D و E و F صالحة أيضًا مع الأرقام.يتم تحويل الرقم المستلم إلى رمز مكمل لاثنين وإرساله إلى حزمة المعامل ككلمة طويلة 32 بت. في هذه الحالة ، إذا كانت قيمة الرقم خارج نطاق القيم القابلة للتمثيل -2147483648: 2147483647 ، فسيتم استبدالها بقيمة قابلة للمقارنة modulo 2 ** 32 من هذا النطاق.

في حالة عدم معرفة المعالج للكلمة المعالجة ولا يمكن قبولها كرقم ، يعرض المعالج رسالة على شاشة الجهاز: "لا أعرف<обрабатываемое слово>وينتظر المزيد من التعليمات.

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

يتم دفع رمز الحرف الفردي إلى المكدس باعتباره البايت المنخفض من الجزء العلوي عندما يصل هذا الحرف إلى إدخال المعالج ، جنبًا إلى جنب مع علامة # التي يسبقها. على سبيل المثال ، مجموعة الأحرف #L سترسل رمز الحرف L إلى المكدس ، وسوف ترسل مجموعة الأحرف رقم 5 رمز الرقم 5. يعرض الأمر TOB لإخراج بايت إلى المحطة الطرفية الحرف الذي يكون رمزه هو الواردة في البايت المنخفض من الجزء العلوي من المكدس.

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

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

VAR TEMP

يمكنك ، جنبًا إلى جنب مع الإعلان ، تعيين قيمة أولية للمتغير ، على سبيل المثال ، 0:

VAR TEMP 0! درجة حرارة

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

يتم تقديم تعريف الإجراء من خلال الأمر: (النقطتين) التي تحتوي على اسم الإجراء الذي يتم تحديده وتحديد سلسلة من الأوامر بحرف ؛ (فاصلة منقوطة) كحرف نهاية التعريف. دعنا نوضح تعريف الإجراءات واستخدامها باستخدام مثال حساب معامل العدد الطبيعي N بالصيغة

N! = N * (N-1) * (N-2) * ... * 2 * 1 ، أي الضرب N-1.

يجب أن يضاعف إجراء FCT للحصول على النتيجة المرجوة الرقم المحدد N عن طريق التناقص المتتالي للأرقام ، بدءًا من N-1 إلى 1 ، أي مرات N-1 فقط. في PARA ، تتم برمجة هذا عن طريق تنفيذ الإجراء P t مرات: DO P ، حيث P هو اسم الإجراء ، t هي القيمة الحالية لأعلى المكدس ، مما يشير إلى عدد مرات تنفيذ الإجراء P.

افترض أنه قبل تطبيق إجراء FCT ، تم دفع الرقم N إلى المكدس وهو في قمته. لجعل الإجراء أكثر قابلية للفهم ، نقدم مُضاعِفًا قابل للتعديل للمتغير K:

نقدم تعريف إجراء FCT في النموذج:

FCT [N]! K K K 1-DO F. [ن] ؛

تعكس التعليقات الموجودة بين قوسين مربعين الحالة الحالية لمكدس المعامل. فريق! K ، الذي يبدأ الإجراء المحدد ، يعين قيمة الرقم N المأخوذ من المكدس إلى المتغير K. ثم يتم دفع K إلى المكدس مرتين وبطرح 1 في أعلى المكدس ، عدد عمليات التنفيذ المتكررة يتم تشكيل الإجراء F يساوي N-1. يتبع ذلك الأمر DO F ، الذي يصف حلقة ، وبعد ذلك سيحتوي الجزء العلوي من المكدس على القيمة المطلوبة للعامل - N !. فريق. (نقطة) يعرض نسخة من هذه القيمة على شاشة المحطة الطرفية. يبقى تحديد الإجراء F الذي يعدل قيمة K بطرح 1 وضربه في K النتيجة الجزئية لحساب R الموجود في المكدس.:

F [R] K 1-! K [R] K * ؛

يتم التحقق من صحة كلا الإجراءين عن طريق تنفيذ تعريفاتهما أمرًا تلو الآخر ، وعرض محتويات مكدس المعامل وقيمة المتغير K على شاشة المحطة الطرفية بعد كل أمر. عند الانتهاء من إجراء FCT ، يظهر الجزء العلوي من يجب أن يحتوي المكدس على القيمة N! ، ويجب أن تكون قيمة المتغير K مساوية لـ 1.

يتم فحص الإجراءات وتصحيحها (إذا تم اكتشاف أخطاء أثناء عملية التحقق) من خلال تطبيقها على القيم الفردية للرقم N. نظرًا لأن الإجراء F متداخل في FCT ، يتم إجراء اختباره تلقائيًا في عملية الاختبار الأخير. يجب أن يؤخذ في الاعتبار أن قيم النتائج يجب ألا تتجاوز الحد الأقصى للرقم الموجب الممثل في رمز مكمل اثنين بكلمة طويلة 32 بت: 2147483647 ، أي يعطي FCT فقط النتائج الصحيحة لـ N = 1 ، ... ، 13.

لا يختلف استخدام FCT عن استخدام إرشادات المعالج الأصلي: للحصول على النتيجة ، يجب تحديد قيمة المعامل وإدخال اسم الإجراء:

5 FCTs 120

7 FCT 5040

يتطلب التنفيذ أعلاه لإجراء FCT إدخال متغير مساعد K ، ومع ذلك ، يمكن تنفيذ إجراء مكافئ وظيفيًا بدون متغير إضافي ، باستخدام العملية C ، التي تدفع نسخة من قمة الرأس إلى المكدس ، والعمليات E2 و E3 ، اللذان يتبادلان الرأس مع العنصرين الثاني والثالث من المكدس ، على التوالي. تعريف هذا الإجراء على النحو التالي.

: FCTA [N] C 1- C DO FA D. ؛

: FA C E3 * E2 1- ؛

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

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

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

عندما يتم أيضًا ، جنبًا إلى جنب مع تجميع تعريف الإجراء P ، تجميع تعريفات جميع الإجراءات المتداخلة غير المعروفة سابقًا ، ثم يتم تكوين تسلسل هرمي كامل للمؤشرات ، مما يضمن إمكانية تنفيذ الإجراء P من خلال توفير اسمه فقط إلى إدخال المعالج. في هذه الحالة ، يتم تجميع أسماء الإجراءات المتداخلة فيما يتعلق بتعريف P ، إذا لم تكن بحاجة إلى الوصول إلى هذه الإجراءات بشكل منفصل ، فلا فائدة من تخزينها في القاموس. في عدد من الحالات ، اتضح أنه من المناسب منع الوصول إلى جزء أو جزء آخر من القاموس ، مما يترك ، ربما ، القدرة على تنفيذ بعض الإجراءات فقط.

من أجل تلبية هذه المتطلبات ، يتم تنفيذ القاموس كمجموعة من القواميس الفرعية ، والتي يتم تحديد العمليات التي تسمح بإنشاء وتدمير القواميس الفرعية وأجزائها ، وحذف الأسماء ، وإغلاق وفتح الوصول إلى قواميس فرعية معينة. لكل قاموس فرعي اسم يتم استخدامه في الأوامر المتعلقة به. يجب أن تبدأ أسماء القاموس الفرعي بالحرف $ ، على سبيل المثال: $ PRIME ، $ EDIT ، $ FLOAT ، $ TEXTPROC ، $ GRAPHICS.

يتم فتح قاموس $ PRIME الفرعي ، الذي يحتوي على المجموعة الأساسية من كلمات PRSP ، بعد بدء تشغيل المعالج للوصول إلى الكلمات الموجودة فيه وللتزويد بكلمات جديدة. يمكن حذف الكلمات الجديدة التي تم إدخالها فيه ، إذا لزم الأمر ، مع الهيئات المرتبطة بها باستخدام الأمر FORGET $ PRIME. بعد ذلك ، يتم ضمان إمكانية إضافة المزيد من الكلمات إلى هذا القاموس الفرعي عن طريق تنفيذ أمر GROW $ PRIME ، والذي يسمح لك بتنمية قاموس $ PRIME الفرعي مرة أخرى ، ويمكن حذف كل شيء تم إدخاله فيه مرة أخرى بواسطة الأمر FORGET $ PRIME ، إلخ. . في هذا الوضع ، تُستخدم أوراق PRIME عند تجربة أجزاء صغيرة من البرامج ، والأمثلة الفردية ، والتقديرات ، وأيضًا ، إذا لزم الأمر ، لتضمين كلمات جديدة في قاموس $ PRIME الفرعي بترتيب تطوير لغة النظام.

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

البرنامج $<имя программы>

ينظر الشخص إلى هذا الأمر على أنه عنوان ، متبوعًا بتعليق بين قوسين مربعين ، يصف في بضع كلمات الوظيفة التي ينفذها البرنامج. بالنسبة للمعالج ، فهو يعادل سلسلة من التعليمات

نسيت $<имя>تنمو $<имя>

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

لا يتم إدخال نص البرنامج المصمم مباشرة من لوحة المفاتيح إلى إدخال المعالج ، ولكن يتم تكوينه في المخزن المؤقت لمحرر النصوص. يعيّن الأمر E (تحرير - تحرير) وضع التحرير ، حيث لا يدرك المعالج الكلمات المكتوبة على لوحة المفاتيح كأوامر يتم تنفيذها على الفور ، ولكن تتم كتابتها ببساطة في المخزن المؤقت ويتم عرضها في نفس الوقت على نص الشاشة. بمساعدة المفاتيح الخاصة التي تتحكم في حركة مؤشر الموضع الحالي (المؤشر) على الشاشة ، بالإضافة إلى أوامر التحرير المعطاة بالضغط على مفاتيح أخرى ، يمكن تصحيح النص المُدخل وتغييره عن طريق إجراء عمليات الحذف والإدخال ، وتحريك أجزاءه من مكان إلى آخر ، إلخ.

في نهاية إدخال النص وتحريره ، يتم إيقاف تشغيل المحرر بالضغط على المفتاح E بالتزامن مع المفتاح (بشكل أكثر دقة ، مع الضغط مسبقًا) ، ويتحول النظام إلى وضع أمر PRSP الرئيسي. يتم تشغيل إجراء مماثل بمجرد الضغط على مفتاح . في هذا الوضع ، يمكن إخراج محتويات المخزن المؤقت للمحرر إلى المعالج بواسطة أمر PF (PerForm - تنفيذ). في هذه الحالة ، سيتم تنفيذ جميع الأوامر الموجودة في النص ، ولا سيما الأمر PROGRAM $<имя>سيزيل القاموس الفرعي $<имя>منذ آخر تنفيذ لهذا الأمر ، وأسماء البيانات والإجراءات ، وكذلك الهيئات المقابلة ، إعادة فتح هذا القاموس الفرعي للنمو. ستدخل أوامر إعلان البيانات وأوامر تعريف الإجراء الأسماء التي تدخلها فيها ، جنبًا إلى جنب مع المؤشرات إلى البيانات التي تدل عليها هذه الأسماء وهيئات الإجراءات التي تم تجميعها وفقًا للتعريفات.

عند اكتمال التحميل ، تكون الإجراءات والبيانات متاحة للرجوع إليها من خلال أسمائها مكتوبة من لوحة المفاتيح ، ويمكن التحقق من صحة البرنامج عن طريق تنفيذ الإجراءات بترتيب تصاعدي ، أي. بدءًا من أولئك الذين لا تحتوي تعريفاتهم على إجراءات غير مختبرة. قبل أن تبدأ في التحقق ، من الجيد التأكد من أن برنامجك لا يستخدم أسماء غير محددة. يعرضها المعالج على الشاشة باستخدام أمر UNDEF. لتكملة نص البرنامج بتعريفات هذه الأسماء ، وكذلك لتصحيح الأخطاء الأخرى المكتشفة أثناء عملية التحقق ، اتصل بالمحرر باستخدام الأمر E وقم بإجراء التعديل المناسب لنص مصدر البرنامج الموجود في المخزن المؤقت للمحرر ، ثم قم بتبديل المعالج إلى الوضع الرئيسي وتحميل محتويات المخزن المؤقت باستخدام الأمر PF.

بعد فحص البرنامج واختباره ، يمكن نسخ كود المصدر الخاص به من المخزن المؤقت للمحرر إلى القرص باستخدام الأمر OE f ، حيث يكون f هو اسم الملف الذي سيتم كتابة البرنامج فيه على القرص. في المستقبل ، يمكن تحميل محتويات الملف إلى إدخال المعالج باستخدام الأمر LOAD f ، وكذلك نسخها إلى المخزن المؤقت للمحرر كإضافة إلى النص الموجود فيه باستخدام الأمر IE f. بشكل افتراضي ، يكون للملفات الامتداد .DSP. يمكن مسح المخزن المؤقت مسبقًا باستخدام الأمر KE. من الممكن أيضًا طباعة محتويات المخزن المؤقت باستخدام الأمر LPE.

بعد تحميل برنامج جاهز للتنفيذ ، من الممكن تنظيف قاموس فرعي $ الذي تم إنشاؤه له.<имя>الأمر CLEAR $<имя>. بتنفيذ هذا الأمر ، يقوم المعالج بإزالة الأسماء غير المثبتة من القاموس الفرعي المسمى ، أي جميع الأسماء باستثناء تلك التي تسبق تعريفاتها بادئة التثبيت :: (نقطتان). في هذه الحالة ، يتم حذف الأسماء نفسها (إدخالات القاموس) فقط ، بينما يتم الاحتفاظ بهيئات الإجراءات والبيانات المرتبطة بها وإتاحتها أثناء تنفيذ البرنامج عبر المراجع الداخلية التي تم إنشاؤها أثناء التجميع ، ولكن لم يعد الوصول إليها متاحًا من الخارج. لاستعادة إمكانية الوصول من الخارج ، على سبيل المثال ، إذا كنت بحاجة إلى تجميع بعض الإضافة أو التغيير ، فأنت بحاجة إلى إعادة تحميل الكود المصدري للبرنامج.

يمكن جعل الأسماء غير قابلة للوصول من الخارج ، دون إزالتها من القاموس ، باستخدام الأمر SHUT $<имя>، مما يؤدي إلى إغلاق الوصول إلى جميع كلمات القاموس الفرعي المسماة فيه. يتم فتح قاموس فرعي لاستخدام كلماته باستخدام الأمر USE $<имя>. يوجد أيضًا أمر $ فقط<имя>، الذي يغلق جميع القواميس الفرعية باستثناء القواميس المسماة ، والأمر CANCEL ، الذي يلغي هذا التقييد. تسمح لك الأوامر المدرجة بالتحكم في استخدام القاموس أثناء التجميع وتقييد مجموعة الأسماء المتاحة لمستخدم البرنامج إلى الحد الأدنى المطلوب.

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

بضع كلمات حول إدخال البيانات وإخراجها. كما ذكرنا سابقًا ، يحاول المعالج تفسير كلمة البرنامج المنفذ غير الموجودة في القاموس كرقم ، وفي حالة نجاحه ، يدفع المكافئ الثنائي لهذا الرقم إلى المكدس. يمكن أن يتم دفع رقم على المكدس باستخدام أمر TIN ، والذي يتطلب كتابة رقم الإدخال على لوحة المفاتيح. هناك أيضًا أوامر تؤدي إلى دفع حرف تم إدخاله من لوحة المفاتيح إلى المكدس: TIB - مع شاشة عرض ، TRB - بدون عرض هذا الحرف على الشاشة. في هذه الحالة ، يتم تمثيل رمز الحرف بواسطة البايت المنخفض لكلمة 32 بت المرسلة إلى المكدس ، حيث تساوي البايتات الثلاثة الأقدم منها صفرًا.

يمكن إدخال محتويات الجزء العلوي من المكدس ، على التوالي ، في شكل رقم وفي شكل حرف. يؤدي الأمر TON إلى عرض القيمة العددية للعقدة الفرعية على الشاشة في حقل الإخراج ، والذي يتم تحديد عرضه بواسطة الرأس ، في نظام تمثيل الأرقام الذي تم إنشاؤه في وقت تنفيذه. يعرض الأمر TOB الحرف الذي يحتوي رمزه في البايت المنخفض لأعلى المكدس. في كلتا الحالتين ، يتم اتباع الإخراج بإزالة الوسائط من المكدس.

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

<адрес вектора>وصلة<имя процедуры>

مقاطعة الأمر هي عملية مسماة لاستدعاء إجراء استجابة. يتم تحديد اسم هذه العملية بواسطة أمر TRAP ، الذي يربط معها ما يسمى بإجراء الاستجابة النهائية ، والذي يتم تنفيذه إذا لم يتم استبدال رد الفعل النهائي بإجراء استجابة آخر باستخدام الأمر ON أو EON. جميع الأوامر الثلاثة لها نفس التنسيق:

فخ<имя вызова> <процедура реагирования>

على<имя вызова> <процедура реагирования>

دهر<имя вызова> <процедура реагирования>

يتم تنفيذ إجراء معين لاسم استدعاء بواسطة تعليمات EON بعد الخروج من نص الإجراء الذي يحتوي على تعليمات EON وقيمة مؤشر مكدس المعامل الذي كان موجودًا في الوقت الذي تم فيه تنفيذ EON.

بناء جملة لغة PARA

تتضمن الأبجدية اللغوية PARADISE الحروف اللاتينية والروسية ، والأحرف الصغيرة والكبيرة ، والأرقام العشرية ، والأحرف الرياضية وغيرها من الأحرف الخاصة. تسمى عناصر (أعضاء) الأبجدية بالحروف. التمثيل الخارجي للحرف هو صورته المطبوعة (الحرف المطبوع). داخل معالج PRSP ، يتم تمثيل كل حرف مطبوع ببايت تكون قيمته هي الرمز الثنائي لذلك الحرف. يتم تحويل التمثيل الخارجي إلى داخلي والعكس بواسطة جهاز الإدخال / الإخراج (لوحة المفاتيح ، الشاشة ، الطابعة). للراحة ، يتم التعبير عن القيمة العددية للرمز بالنظام العشري أو السداسي العشري أو الثماني ، مع استدعاء الرقم المقابل للرمز العشري أو السداسي أو الثماني.

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

كلمات المثال: CLEAR NOP STEK2 & 1+ -366 X Probe.

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

عندما لا توجد كلمة يمكن التعرف عليها في القاموس ، يحاول المعالج تخصيصها لإحدى الحالات التالية:

    حرفية رقمية ، أي سلسلة من الأرقام ، ربما تبدأ بعلامة ناقص ، على سبيل المثال: 0 ، 4096 ، -25 ؛

    literal literal: كلمة تبدأ بالحرف # ، مما يجعل المعالج يستقبل كرمز معين الحرف الذي يليه مباشرة ، على سبيل المثال: #A - Literal من الحرف اللاتيني الكبير A ، # 5 - حرفي من الرقم 5 ، # - مسافة حرفية، ## - أحرف حرفية #؛

    نص حرفي: نص عشوائي محاط بعلامات اقتباس مزدوجة ومفصول بفواصل الكلمات ، على سبيل المثال: "نص" ، "ملف إدخال N3" ؛

    أمر لإصدار رسالة نصية للعرض: نص رسالة الإخراج ، محددًا على اليسار بمجموعة من علامات الاقتباس المزدوجة والنقطتين على اليمين ومفصولة بفواصل الكلمات ، على سبيل المثال: "Stack is blank" ؛

    تعليق: نص تعسفي محاط بأقواس مربعة ومفصول بمحددات ، على سبيل المثال:.

تعمل الأحرف والأمر الخاص بإصدار رسالة إلى الشاشة ككائنات من لغة PRSP جنبًا إلى جنب مع الكلمات التي تم التعرف عليها من القاموس ، بينما يتم تجاهل التعليقات تمامًا بواسطة معالج PRSP - فهي مخصصة لشخص وليس لآلة. إذا لم يتم العثور على الكلمة في القاموس ولم تكن مرتبطة بالتركيبات المدرجة ، يصدر المعالج رسالة: "لا أعرف<неопознанное слово>".

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

يتم تفسير تسلسل الكلمات عند إدخال المعالج على أنه سلسلة من التعليمات التي ينفذها المعالج. هناك ثلاثة أنواع من الكلمات:

1) يتم إجراؤها بشكل مستقل ، أي تمثل الأوامر المكونة من كلمة واحدة (كلمات أحادية) ؛

2) يتم إجراؤها جنبًا إلى جنب مع كلمة أو أكثر من الكلمات اللاحقة ، أي وهي الكلمات الأولية (البادئات) لأوامر مكونة من كلمتين أو ثلاث أو كلمات متعددة ؛

3) تسبق الأمر كتوضيح أو إشارة لوضع التنفيذ الخاص (البادئات).

تتضمن الكلمات الأحادية القيم الحرفية وأسماء البيانات ومعظم عمليات الإدخال / الإخراج والاختبار وتحويل البيانات على المكدس والإجراءات التي يحددها المستخدم. على سبيل المثال: 1987 - حرفية رقمية ، رقم 5 - حرفية من الرقم 5 ، "قائمة المخططات" - نص حرفي ، LENGTH - اسم متغير ، TOB ، NEG ، + ، & ،<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

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

VAR SUM - إنشاء متغير SUM ،

: ODD [x] 1 &؛ - إنشاء إجراء ODD يستبدل الرقم الفردي بـ 1 ، ورقم زوجي بـ 0 ،

0 X - إسناد القيمة 0 إلى المتغير X ،

BR + P1 P2 - إذا كانت قيمة القمة المأخوذة من المكدس موجبة ، فقم بتنفيذ P1 ، وإلا نفذ P2 ،

RP CHECK - قم بتنفيذ إجراء CHECK مرارًا وتكرارًا ،

USE $ REAL - افتح قاموسًا فرعيًا $ REAL للاستخدام.

كقاعدة عامة ، تتطلب بادئة معينة عددًا معينًا من الكلمات بعد نفسها. وبالتالي ، في الأمثلة المقدمة للتو ، تتطلب بادئات VAR و! 0 و USE كلمة واحدة لكل منها ، بينما تتطلب بادئة BR + كلمتين. ومع ذلك ، فإن البادئة: (النقطتين) تسمح لك بتكوين أمر بطول عشوائي ، بدءًا من ثلاث كلمات. نهاية الأمر كلمة. (فاصلة منقوطة). الطول التعسفي هو أيضًا سمة مميزة لوصف أوامر الثوابت CNST A1 ... AJ؛ وأمر إجراء التحديد المتعدد BR A1 P1 ... AJ PJ ELSE PN.

البادئات هي كلمات خاصة ، عند إضافتها إلى مقدمة الأمر ، تعدل محتواها أو تحدد وضعًا خاصًا للتنفيذ. على سبيل المثال ، أمر VAR X بدون بادئة هو تعليمات لإنشاء متغير X 16 بت. إذا قمنا بإلحاق بادئة BYTE به ، نحصل على الأمر BYTE VAR X ، الذي يوجه إنشاء 8 بت متغير (بايت) بالاسم X. إذا استخدمنا البادئة LONG ، فسنحصل على LONG VAR X - تعليمات لإنشاء متغير 32 بت باسم X.

تخبر بادئة من نوع آخر ، وهي :: (نقطتان) ، نتيجة تنفيذ الأمر بالاستقرار فيما يتعلق بإجراء المحو CLEAR ، الذي يزيل الكلمات السائبة من القاموس. الأسماء التي يتم إدخالها في القاموس أثناء إنشاء البرنامج عن طريق أوامر وصف البيانات وتعريف الإجراء ، بعد إنشاء البرنامج واختباره ، يمكن إزالتها من القاموس ، باستثناء القليل منها الضروري للحفاظ على البرنامج النهائي. يتم الحذف باستخدام الأمر CLEAR $<имя подсловаря>، تعليمات لمسح القاموس الفرعي المرتبط بالبرنامج ، مع حفظ الكلمات الموجودة في التعريفات التي تحتوي على البادئة ::. أمثلة على الأوامر التي تولد كلمات غير قابلة للإزالة:

:: BYTE CNST LITCODE # # 0 #A ؛

::: MOD / [الهدف (أ ، ب) ، الراحة (أ ، ب)] E2 D [الراحة (أ ، ب)] ؛

كما يظهر المثال الثاني الذي يحتوي على بادئات :: و ​​BYTE ، يمكن أن يكون هناك أكثر من بادئة في الأمر.

وبالتالي ، يمكن أن يكون الأمر في DSSP إما كلمة واحدة (أحادي الكلمة) أو عبارة (عبارة) تبدأ ببادئة وتحتوي على عدد الكلمات التي تم تعيينها لهذه البادئة ، وإذا كانت البادئة تسمح بعدد تعسفي من الكلمات ، فإنها تحتوي على كلمة محددة في النهاية ، أو قد تكون عبارة مسبوقة بكلمات بادئة خاصة.

لا تحتوي اللغة الأساسية لـ DSSP على إنشاءات نحوية أكثر تعقيدًا من الأمر ولا تحتوي على أي تركيبات بخلاف تلك التي تمت مناقشتها أعلاه. حتى هذه الأشياء التي لا غنى عنها في لغات البرمجة كتعبير ووظيفة غائبة في اللغة الأساسية ويمكن تقديمها ، إذا لزم الأمر ، فقط في سياق تطورها.

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

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

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

وصف العمليات والأوامر

العمليات المنجزة على المكدس

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

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

فيما يلي مثال على تعليق يعكس حالة مكدس المعامل:

[بدء الدكتور ، N + 1،1 / 0]

عند النقطة في البرنامج حيث يوجد هذا التعليق ، يجب أن تحتوي حزمة المعامل على ثلاثة مواضع على الأقل ، ويمكن أن تكون في الأعلى 1 أو 0 ، في الأسفل - قيمة عددية تساوي N + 1 ، وأسفلها - بعض يتم تفسيره على أنه عنوان البداية.

لسهولة تحديد الموضع المطلوب للمكدس ، سوف نستخدم مفهوم عمق التواجد. سنفترض أن الجزء العلوي من المكدس عند العمق 1 ، والقاع عند العمق 2 ، وهكذا. على وجه الخصوص ، يتم الإشارة إلى القيمة في المثال على أنها "start.adr". تقع في العمق 3.

سنبدأ دراستنا للغة PRSP الأساسية بتعليمات لدفع القيم إلى المكدس. أبسط (والأكثر استخدامًا) أمر من هذا النوع هو حرفي رقمي ، أي إشارة صريحة إلى ثابت يتم دفعه إلى المكدس. دعنا ، على سبيل المثال ، نريد دفع الأرقام 28 و -5 و 11 على المكدس. للقيام بذلك ، أدخل السطر من لوحة المفاتيح:

28-5 11 واضغط على المفتاح (إرجاع). يتعرف المعالج على الأرقام المدخلة ويدفعها إلى المكدس بدوره ، بحيث يكون 11 في الأعلى. للتحقق من ذلك ، يكفي طباعة قيمة الجزء العلوي من المكدس على شاشة العرض. لهذا ، يتم استخدام أمر DSSP بالاسم. (نقطة). عن طريق كتابة الحرف "نقطة" على لوحة المفاتيح والضغط ، نحصل على الإجابة على الشاشة: 11 ، والتي تتوافق مع آخر قيمة تم إرسالها إلى المكدس. إعادة تنفيذ "النقطة" لها نفس النتيجة - هذا الأمر يعرض الرأس فقط دون تغيير حالة المكدس.

من أجل عرض المحتويات الكاملة للمكدس على الشاشة ، فإن DSSP لديه أمر .. (نقطتان). بعد تنفيذه ، يظهر السطر التالي على الشاشة:

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

يتم استخدام كلمة 32 بت (4 بايت) لتمثيل موضع مكدس واحد في ذاكرة الجهاز ، ويتم تمثيل الأرقام في مكملين اثنين. وفقًا لذلك ، يمكن لمعالج PRSP أن يدرك بشكل صحيح فقط الأعداد الصحيحة التي تتراوح من -2147483648 إلى 2147483647. إذا كان الرقم الذي تم إدخاله غير قابل للتمثيل في 32 بت (مع مراعاة العلامة) ، فسيتم تجاهل البتات الأكثر أهمية التي لا تناسب.

في الأمثلة المدروسة ، تم افتراض أن معالج أوراق استراتيجية الحد من الفقر في وضع إدخال / إخراج عشري للأرقام. لضبط هذا الوضع في لغة الجنة هناك أمر B10.

في العديد من المهام ، يلزم تفسير البيانات المعالجة ليس كأرقام ، ولكن كرموز ثنائية ، أي متجهات بت مكونة من 32 مكونًا. في DSSP ، من الممكن العمل مع الأكواد المقدمة في أنظمة الأرقام الثنائية أو الثمانية أو السداسية العشرية. لضبط الوضع المطلوب ، يكفي تنفيذ أحد الأوامر الثلاثة: B2 أو B8 أو B16 ، وبعد ذلك سيقبل المعالج ويطبع جميع الرموز المدخلة في نظام الأرقام المحدد.

يمكن استخدام هذه الميزة لتحويل الأرقام العشرية إلى القواعد 2 و 8 و 16. على سبيل المثال ، لتحويل الرقم 29 ، أدخل السطر التالي ونفذه:

B10 29 ب 2. ب 8. ب 16. نتيجة لذلك ، سيعرض المعالج سلسلة من الأرقام على الشاشة: 00000000035 0000001D وهي تمثيل للرقم العشري 29 في أنظمة الأرقام الثلاثة المشار إليها. لاحظ أن الرموز مطبوعة في تمثيلها الآلي ، أي بأصفار بادئة وبدون علامات "+" ، "-". عند تنفيذ الخط B10 -2 B8. سيعيد الرقم 37777777776 ، وهو التمثيل الثماني لمكمل -2.

عند العمل باستخدام الرموز السداسية العشرية ، يمكن أن تحدث تضاربات بين أسماء أوامر معالج PRSP. على سبيل المثال ، يمكن تفسير الكلمة B8 في وضع الإدخال / الإخراج السداسي العشري كأمر لتعيين الوضع الثماني وكثابت سداسي عشري. لتجنب الغموض ، يجب أن تبدأ القيم الحرفية الرقمية بصفر غير مهم ، مثل 0B8.

أساس نظام الأوامر الخاص بمعالج DSSP هو عمليات تحويل البيانات الموجودة في المكدس. القاعدة العامة التي تحكم هذه العمليات هي أن كل عملية تستهلك (تزيل) المعاملات التي تتطلبها من المكدس وتدفع قيم النتيجة (إن وجدت) في مكانها.

ضع في اعتبارك تعليمات المعالج التي تنفذ أربع عمليات حسابية: الجمع والطرح والضرب وقسمة الأعداد الصحيحة. بالنسبة لصورتهم بلغة الجنة ، يتم استخدام الكلمات التالية: + ، - ، * و / ، على التوالي. للحصول على مجموع رقمين في المكدس ، على سبيل المثال 123 و 45 ، تحتاج إلى دفع هذه الأرقام إلى المكدس وتنفيذ الأمر +. للقيام بذلك ، ما عليك سوى إدخال السطر التالي من لوحة المفاتيح (بافتراض ضبط وضع الإدخال / الإخراج العشري):

123 45 +

إذا عرضنا الآن محتويات المكدس على الشاشة (باستخدام الأمر ..) ، فستصبح نتيجة الإضافة مرئية:

تعمل عملية الضرب التبادلية بطريقة مماثلة.

عند إجراء عمليات الطرح والقسمة غير التبادلية ، يتم أخذ الجزء العلوي للمكدس باعتباره الحد الأدنى (المقسوم) ، ويتم استخدام الجزء العلوي باعتباره المطروح (المقسوم عليه). على سبيل المثال ، لحساب الفرق 151-68 ، تحتاج إلى تنفيذ السطر:

151 68 -

يتميز برنامج إجراء عملية حسابية بلغة PARA بحقيقة أن العملية تقع بعد المعاملات المقابلة لها. يسمى هذا التدوين للتعبيرات الحسابية ترميز postfix (أو المعكوس البولندي) ويستخدم على نطاق واسع في الآلات الحاسبة للمكدس. دعنا ، على سبيل المثال ، نحتاج إلى حساب قيمة التعبير الحسابي ((127 + 81) * 15- (31 + 117) * 21) * 3

في تدوين postfix ، سيبدو هذا التعبير كما يلي:

127 81 + 15 * 31 117 + 21 * - 3 *

هذا السطر (الذي يتم فيه فصل الكلمات عن بعضها البعض بمسافات) هو برنامج جاهز لحساب تعبيرنا بواسطة معالج أوراق PRSP.

يختلف القسمة / الأمر عن العمليات الحسابية الأخرى في أنه ينتج عنه قيمتان - حاصل القسمة والباقي. حاصل القسمة في أسفل المكدس ، والباقي في الأعلى. يكون حاصل القسمة سالبًا إذا كان للمقسوم والمقسوم عليه علامات مختلفة. الباقي دائمًا لديه علامة المقسوم. فيما يلي بعض الأمثلة على استخدام أمر القسمة.

125 7 / [-17,-6] / / /

عند إجراء العمليات الحسابية ، يمكن أن تحدث مواقف خاطئة: تجاوز والقسمة على صفر. لا يتفاعل معالج DSSP معهم بأي شكل من الأشكال (على وجه الخصوص ، عند القسمة على الصفر ، لا تتغير محتويات المكدس) ، ويتم تعيين التحكم في الاستخدام الصحيح للعمليات للمبرمج.

عند البرمجة ، غالبًا ما يكون من الضروري زيادة أو تقليل قيمة القيمة بمقدار 1 و 2. تم إدخال أوامر خاصة في لغة PARADISE التي تقوم بتنفيذ الإجراءات المحددة في الجزء العلوي من المكدس. يشار إليها بالكلمات: 1+ ، 1- ، 2+ ، 2-. تنفيذ هذه الأوامر يعادل دفع الثابت المطلوب (1 أو 2) على المكدس ، متبوعًا بإجراء العملية الحسابية المطلوبة (+ أو -). على سبيل المثال ، 2+ تعادل الكلمة الزوج 2 +. مقدمة في لغة هذه الأوامر ناتجة عن اعتبارات الكفاءة.

أيضًا ، لتحسين الكفاءة ، تحتوي اللغة الأساسية لمعالج DSSP على الأمرين T0 و T1 ، اللذين يستبدلان قيمة الجزء العلوي من المكدس بـ 0 و 1 ، على التوالي ، بغض النظر عن القيمة الموجودة في الجزء العلوي قبل الأمر المحدد. أمثلة:

تم تصميم أوامر NEG و ABS و SGN أيضًا للعمل مع البيانات الرقمية. تعكس تعليمات NEG علامة الجزء العلوي من المكدس ، وتستبدل ABS قيمة الجزء العلوي من المكدس بقيمتها المطلقة ، SGN - تستهلك قيمة رقمية من أعلى المكدس وتضع علامة الرقم المستخرج في الخاص به المكان: -1 - إذا كان الرقم سالبًا ، 1 - إذا كان موجبًا ، 0 - إذا كان يساوي صفرًا. على سبيل المثال:

5 NEG [-5] ABS SGN

يسمح لك الأمران MIN و MAX في اللغة الأساسية بالعثور على حد أدنى وحد أقصى من عددين صحيحين. معاملات هذه التعليمات عبارة عن رقمين في أعلى وأسفل المكدس. تترك تعليمة MIN الحد الأدنى لعدد المعلمات في المكدس ، والحد الأقصى MAX منها. على سبيل المثال:

5 0 15 دقيقة [-5.0] كحد أقصى

للعثور على الحد الأدنى (الأقصى) للأرقام الثلاثة في المكدس ، يكفي تطبيق الأمر MIN (MAX) مرتين:

دقيقة دقيقة [-2]

تعليمات SEG للتحقق مما إذا كان الرقم الموجود في الجزء العلوي من المكدس يقع ضمن النطاق المحدد من a إلى b (بما في ذلك الحدود) يترك العلم التالي على المكدس كنتيجة: 1 إذا كان الرقم في النطاق ، و 0 إذا لم يكن:

[علامة] SEG على سبيل المثال:

بالإضافة إلى التعليمات الخاصة بالعمل مع البيانات الرقمية ، تتضمن مجموعة التعليمات الخاصة بمعالج DSSP عددًا من العمليات المصممة لتحويل أكواد 32 بت. تتعامل هذه العمليات مع عنصر المكدس على أنه ناقل مكون من 32 مكونًا من البتات ، يتم ترقيم مكوناته من اليمين إلى اليسار بحيث يكون الجزء الأيسر هو رقم 31 ورقم أقصى اليمين هو 0. الترقيم التنازلي للمكونات يتكرر ترقيم بتات الكلمات الآلية المعتمدة للعديد من المعالجات الدقيقة.

تتضمن تعليمات متجه البت بشكل أساسي عمليات الجبر المنطقي باستخدام طريقة البت:

    انعكاس البت في الجزء العلوي من مكدس INV ، وتغيير قيمة كل بت من الجزء العلوي ، أي استبدال 0 بـ 1 و 1 بـ 0 ؛

    اقتران بت بين الجزء العلوي والسفلي من المكدس & ، وتعيين البتة i من النتيجة ، i = 31،30 ، ... ، 0 ، إلى 1 إذا كانت البتات i لكلا المعاملين 1 ، وبخلاف ذلك ضبط بت i يساوي 0 ؛

    فصل أحادي للجزء العلوي والسفلي من المكدس & 0 ، وضبط البتة i من النتيجة ، i = 31،30 ، ... ، 0 ، إلى 0 إذا كانت بتات i لكلا المعاملين 0 ، وبخلاف ذلك ضبط بت i يساوي 1 ؛

    إضافة البت (عدم التكافؤ) "+" للأعلى والأسفل ، مع ضبط البتة i من النتيجة إلى 0 إذا كانت بتات i لكلا المعاملين لها نفس القيم ، وتعيين البتة i من ينتج عن ذلك 1 إذا كانت قيم البتات i في المعاملات مختلفة.

525 INV 722 & 136 & 0325 "+"

غالبًا ما يتم استخدام اقتران البتات لإعادة تعيين (مسح) أجزاء من الكلمة. للقيام بذلك ، يتم دمج الكلمة الأصلية مع قناع يحتوي على أصفار في تلك البتات التي تحتاج إلى مسح والأخرى في البتات المتبقية. على سبيل المثال ، إذا كنت بحاجة إلى إعادة تعيين البتات من 3 إلى 5 في بعض الكلمات X ، فستحتاج إلى إجراء اقتران أحادي مع القناع 37777777707. بالنسبة إلى X = 235 ، نحصل على:

يمكن استخدام فصل البتات لإدراج المجموعة المرغوبة من البتات في مجموعة بتات الكلمة التي تم مسحها مسبقًا. دعنا ، على سبيل المثال ، تحتاج إلى وضع المجموعة الثنائية 010 في البتات من 3 إلى 5 من الكلمة المتبقية في المكدس كنتيجة للمثال الأخير. يمكن القيام بذلك على النحو التالي:

تتضمن عمليات معالجة البت أيضًا تعليمات التحويل المنطقية:

    إزاحة اليسار SHL - كل بت من الجزء العلوي من المكدس ، بدءًا من 31 ، يأخذ قيمة الواحد الذي يليه بترتيب تنازلي للأرقام ، وتأخذ آخر بتة صفرية القيمة 0 ؛

    التحول الصحيح SHR - كل بت من الجزء العلوي من المكدس ، بدءًا من 0 ، يأخذ قيمة العنصر التالي بترتيب تصاعدي للأرقام ، وتأخذ البتة 31 القيمة 0 ؛

    التحول العلوي SHT - تتم إزالة العنصر العلوي من المكدس ويعتبر عددًا صحيحًا N ، مما يشير إلى عدد التحولات وفي أي اتجاه يجب إجراؤه في الجزء العلوي من المكدس: عندما يكون N> 0 ، يتم إجراء إزاحة لليسار ، عندما N<0 - вправо.

B8 125 SHR SHL -2 SHT

يمكن استخدام عمليات الإزاحة لليسار لمضاعفة الأرقام في 2 أس N ، حيث N هو رقم طبيعي يحدد عدد التحولات. على سبيل المثال ، يمكن ضرب الرقم -5 في 8 عن طريق إزاحة هذا الرقم 3 أرقام إلى اليسار:

B10 -5 3 SHT [-40]

في هذه الحالة ، ينبغي أن تؤخذ في الاعتبار إمكانية تجاوز التدفق.

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

بينما

قم بتدوير الجزء العلوي من المكدس 1 بت إلى ROR الأيمن وتكون ROL اليسرى مماثلة لتعليمات النقل المنطقي ، فيما عدا أن بت الحافة التي يتم دفعها للخارج لا تختفي ، ولكن يتم دفعها إلى المساحة الفارغة من الطرف المقابل لـ 32 -بت كلمة طويلة. على سبيل المثال (الأرقام السداسية العشرية):

أوامر معالج DSSP SWB و SWW مخصصة أيضًا لمعالجة الرموز الثنائية. تتمثل وظيفة SWB في تبديل وحدات البايت في النصف السفلي من الجزء العلوي من المكدس ، وتتمثل وظيفة SWB في تبديل نصفي الجزء العلوي من المكدس. دعنا نوضح كيف تعمل هذه الأوامر باستخدام وضع الإدخال / الإخراج السداسي العشري (في هذا الوضع ، يتم تمثيل كل بايت برقمين سداسي عشريين):

B16 0 ABCD SWB SWB

0ABCDEF12 SWW SWB

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

توجد ثلاثة أوامر لإزالة عناصر المكدس: D ، DD ، DS (إسقاط - تجاهل). يزيل الأمر D عنصرًا واحدًا (علوي) من المكدس ، DD - عنصرين ، على سبيل المثال:

يزيل D DD D DS جميع العناصر من المكدس (يمسح المكدس):

يدفع الأمر لنسخ الجزء العلوي من المكدس C (نسخ) نسخة من القيمة الحالية لأعلى المكدس إلى المكدس. هذا يعادل تكرار العنصر العلوي للمكدس: يصبح الرأس القديم هو subvertex ، وتصبح نسخته الرأس الجديد. مثال:

سنعرض تطبيق هذا الأمر باستخدام مثال حساب كثير الحدود p (x) = 3 * x ** 2 + 4 * x-5 وفقًا لمخطط هورنر: p (x) = (3 * x + 4) * x-5. نفترض أن القيمة x موجودة في الجزء العلوي من المكدس.

[x] ج 3 * 4 + * 5 -

إلى جانب الأمر لنسخ الجزء العلوي من المكدس بلغة PARADISE ، توجد أيضًا أوامر C2 و C3 و C4 ، والتي تنسخ العناصر الموجودة على عمق 2 ، 3 ، 4. يمكن شرح عملياتها من خلال الأمثلة التالية:

C2 C4

يوجد أيضًا أمر CT لنسخ عنصر بالعمق المحدد في أعلى المكدس. عند تنفيذ CT ، يقوم المعالج بإزالة العنصر العلوي من المكدس ، ويستخدم قيمته كمؤشر لعمق العنصر المنسوخ ، ويدفع نسخة من العنصر الأخير إلى المكدس. لذلك ، يتم تحديد نسخ عنصر يقع على عمق 5 بواسطة زوج من 5 تعليمات CT ، وتنفيذها ، سيقوم المعالج بدفع الرقم 5 إلى المكدس ، ثم تنفيذ تعليمات التصوير المقطعي المحوسب. تنفيذ CT مع المعلمات 1 ، 2 ، 3 ، 4 مكافئ للأوامر C ، C2 ، C3 ، C4 على التوالي.

تعمل أوامر التبادل E2 و E3 و E4 (التبادل - التبادل) على تبديل العنصر الأول (العلوي) من المكدس ، على التوالي ، مع العنصر الثاني والثالث والرابع ، أي مع العنصر الموجود على عمق 2 ، 3 ، 4. على سبيل المثال:

E3 E2

للتبادل على أعماق أكبر ، يتم استخدام تعليمات ET ، والتي ، مثل CT ، تستخدم قيمة الجزء العلوي من المكدس كمؤشر على عمق العنصر الذي يتم تبادله مع العنصر الأول. على سبيل المثال:

5ET

الأمر ET مع المعلمات 2 و 3 و 4 يكافئ الأوامر E2 و E3 و E4.

لتوضيح استخدام أوامر النسخ والتبادل ، ضع في اعتبارك مشكلة تدريب. هناك ثلاثة أرقام على المكدس. مطلوب للحصول على المكدس:. يمكننا اقتراح البرنامج التالي الذي يتضح معناه من التعليقات.

C3 C3 C3 +

E4 + E4

يوضح هذا المثال جيدًا مدى أهمية دور التعليقات ، حيث يعكس حالة مكدس المعامل.

غالبًا ما يتعين على البرامج مقارنة القيم العددية مع بعضها البعض وتنفيذ إجراءات مختلفة بناءً على نتائج المقارنة. لغة RAYA لها أوامر مقارنة<, =, >. يتم تعريفها على الأرقام وتنتج القيم العددية 0 و 1 نتيجة لذلك ، الأمر< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >يرسل 1 عندما يكون العنصر السفلي أكبر من العنصر العلوي. لبرمجة المقارنات غير الصارمة (أقل من أو يساوي ، أكبر من أو يساوي) ، يتم استخدام الأمر NOT ، الذي يستبدل قيمة الجزء العلوي من المكدس التي لا تساوي الصفر بصفر ، وتساوي الصفر مع واحد. على سبيل المثال ، يمكن تحديد تقييم التعبير المنطقي x> = 5 ، حيث x عبارة عن رقم ما في أعلى المكدس ، على النحو التالي:

[x] 5< NOT

يتم توفير مزيد من التوسع في إمكانيات شروط البرمجة من خلال الاستخدام ، إلى جانب أوامر المقارنة ، للعمليات المنطقية للترابط & (المنطقية AND) والفصل 0 (OR المنطقي). دعنا ، على سبيل المثال ، مطلوب الحصول على 1 على المكدس إذا كان الرقم x عند الرأس ينتمي إلى نصف القطعة C 5< NOT C2 10 <

& E2 2 = & 0

ستتم مناقشة أدوات إدارة البرنامج بناءً على نتائج المقارنة لاحقًا.

تعريف الإجراءات

كتقنية برمجة أساسية ، توفر أوراق PRSP للمستخدم القدرة على تحديد تسلسلات مسماة من العمليات تسمى الإجراءات. فليكن مطلوبًا ، على سبيل المثال ، حساب قيم ثلاثي الحدود المربع 3 * س ** 2-4 * س + 9 لقيم س معطاة. في هذه الحالة ، يجب عليك تحديد إجراء يقوم بتنفيذ الصيغة ثلاثية الحدود وإخراج النتيجة إلى المحطة ، ثم تطبيق هذا الإجراء على قيم x المحددة. يتم تعريف الإجراء المطلوب ، دعنا نسميه PX ، على النحو التالي: PX [x] C 3 * 4 - * 9 +. د؛ تعني النقطتان عملية "تحديد الإجراء" ، مع اسم الإجراء الذي يلي النقطتين بعد مسافة فاصلة. يتبع تسلسل تعريف الأوامر (نص الإجراء) اسم الإجراء وينتهي بفاصلة منقوطة. باختصار ، يتم تعريف الإجراء في النموذج:

: <имя процедуры> <тело процедуры> ;

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

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

بعد إدخال تعريف الإجراء والضغط على المفتاح يتم إبلاغ المعالج بنهاية الإدخال ، تظهر علامة النجمة على شاشة الجهاز ، مما يشير إلى تنفيذ أمر "تحديد الإجراء" واستعداد المعالج لمواصلة الحوار. يمكنك الآن تطبيق إجراء PX على قيم x التي تحددها لوحة المفاتيح ، على سبيل المثال ، على 2 ، 3 ، 4 (تم وضع خط تحتها من قبل المعالج):

* 2 بكسل 13

* 3 بكسل 24

* 4 بكسل 41

دعونا نحدد إجراءً أكثر عمومية لحساب ثلاثي الحدود من الشكل a2 * x ** 2 + a1 * x + a0 ، والذي يسمح لنا بتعيين قيم كل من x و a0 ، a1 ، a2. دعنا نسميها PXA:

: PXA C E4 E3 * + * + ؛

عند استخدام PXA ، يجب أن تكون القيم a0 و a1 و a2 و x في التسلسل المطلوب على المكدس. على سبيل المثال: a0 = 1 ، a1 = 2 ، a2 = -3 ، x = 4

* 1 2 -3 4 PXA. د -39

في نص الإجراء ، جنبًا إلى جنب مع العمليات الأساسية للمعالج ، قد تكون هناك إجراءات يحددها المستخدم. على سبيل المثال ، يمكنك تحديد الإجراء P الذي ، بالإضافة إلى العمليات الحسابية التي تقوم بها PXA ، سيصدر نسخة من النتيجة إلى الجهاز ويزيل النتيجة من المكدس.

: PXA. د؛

على وجه الخصوص ، قد يتضمن نص الإجراء اسم الإجراء الذي يتم تحديده ، أي أن الإجراء قد يكون تكراريًا. على سبيل المثال:

: TIME [t] 1- TIME؛

يقلل هذا الإجراء من قيمة الجزء العلوي من المكدس بمقدار 1 ويشير إلى نفسه مرة أخرى ، أي أنه يعمل كعداد زمني.

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

التنفيذ والتكرار المشروط

يُطلق على البرنامج ، وهو عبارة عن سلسلة من الأوامر المنفذة بالترتيب الذي تم وضعه فيه واحدًا تلو الآخر في سجله ، اسم خطي. لجعل البرنامج مرئيًا (مقروءًا) ومفهومًا بسهولة ، يتم تقسيمه إلى أجزاء مسماة لها معنى معين - إجراءات ، يتم تحديد كل منها من خلال تسلسل الإجراءات الخاص بها ، والتي يتم تحديدها بدورها من خلال تسلسل إجراءات أصغر ، إلخ. للإجراءات المحددة مباشرة من خلال تسلسل أوامر أوراق استراتيجية الحد من الفقر. يُطلق على مثل هذا البرنامج ، المكتوب كتسلسل هرمي لتعريفات الإجراءات ، اسم منظم. تسمى طريقة بناء برنامج منظم ، والتي تتكون من التحلل التدريجي للمشكلة ليتم حلها إلى مهام فرعية أصغر وأصغر ، البرمجة المنظمة.

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

تتم صياغة شروط تنفيذ الإجراء أو عدم تنفيذه بالنسبة إلى علامة الرقم ، بشكل أكثر دقة ، بالنسبة إلى علامة القيمة الموجودة في الجزء العلوي من المكدس حاليًا. يرشد الأمر الرئيسي للتنفيذ الشرطي للإجراء - BRS (BRanch on Sign - الفرع بالتوقيع) بتنفيذ أحد الإجراءات الثلاثة المسماة باسم BRS ، اعتمادًا على علامة القيمة الحالية لأعلى المكدس. عند تنفيذ BRS ، يقوم المعالج بإزالة العنصر العلوي من المكدس ، ويختبر قيمته ، وإذا كانت سالبة ، ثم ينفذ الإجراء الأول من الإجراءات المذكورة أعلاه ، إذا كان صفرًا ، ثم الثاني ، وإذا كان موجبًا ، فالثالث. حتى الفريق

سيؤدي إلى إزالة عنصر واحد من المكدس وتنفيذ الإجراء N إذا كانت القيمة المحذوفة سالبة ، وتنفيذ الإجراء P إذا كان موجبًا ، وتنفيذ الإجراء Z إذا كان يساوي صفرًا.

مثال على استخدام الأمر BRS هو التعريف التالي لإجراء SGN

: SGN [X] BRS -1 0 1 ؛

يستبدل هذا الروتين القيمة X أعلى المكدس بـ -1 إذا كان X<0, числом 0, если X=0, и числом 1, если X>0. إجراء SGN متاح في أوراق PRSP كعملية أساسية للمعالج.

يوفر أمر BRS ، إلى جانب اختيار إجراء واحد من ثلاث بيانات ، القدرة على تنفيذ عوامل تشغيل ثنائية القيمة من النموذج IF-THEN و IF-THEN-ELSE. على سبيل المثال ، العبارة إذا كانت x> 0 ثم P1 else P0 تتوافق مع الأمر BRS P0 P0 P1 ، والبيان إذا كان x<>0 ثم P - الأمر BRS P NOP P ، حيث NOP هو اسم عملية فارغة. ولكن في DSSP ، يوجد تنفيذ أكثر كفاءة للشروط ذات القيمتين - الأوامر IF- ، IF0 ، IF + ، BR- ، BR0 ، BR +.

تتوافق أوامر مجموعة IF مع عبارة IF-THEN. على سبيل المثال ، يرشد الأمر IF-P لإزالة العنصر العلوي من المكدس واختبار علامته ، وإذا كان هذا العنصر يحتوي على علامة الطرح ، فقم بتنفيذ الإجراء P. الأمران IF0 P و IF + P لتنفيذ الإجراء P ، على التوالي ، في الحالة التي يكون فيها العنصر الذي تمت إزالته صفرًا ، وعندما تكون قيمته موجبة.

كمثال يوضح استخدام أوامر مجموعة IF ، سنقدم تعريفًا لأمر اللغة الأساسية ABS الذي يحسب معامل الجزء العلوي من المكدس.

: ABS [X] C IF-NEG [| X |] ؛

تتوافق أوامر BR- و BR0 و BR + مع بيان IF-THEN-ELSE ، ويطلب منك اختيار أحد الإجراءين اللذين يتم استدعاؤهما بعدهما. إذا كانت علامة العنصر الذي تمت إزالته من المكدس تطابق تلك الموجودة في تعيين الأمر ، فسيتم تنفيذ الإجراء المسمى أولاً ، وإذا لم يتطابق ، فسيتم تنفيذ الإجراء الثاني. على سبيل المثال ، يرشد الأمر BR0 P0 P1 إلى تنفيذ الإجراء P0 في الحالة التي يكون فيها العنصر الذي تمت إزالته من المكدس صفرًا ، وإذا لم يتم استيفاء هذا الشرط ، فقم بتنفيذ الإجراء P1.

تسمح لك الأوامر المدروسة ببرمجة تنفيذ الإجراء اقتصاديًا وفقًا للشروط المحددة. الشروط الأكثر شيوعًا للنموذج x<0, x=0, x>يتم تنفيذ 0 مباشرة بواسطة أوامر مجموعة IF. الشروط x<=0, x<>0 ، x> = 0 مبرمجة باستخدام تعليمات BR- ، BR0 ، BR + باستخدام عملية NOP الفارغة كإجراء أول. على سبيل المثال ، الجملة إذا كانت س<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NOT [x] BR0 1 0 ؛

غالبًا ما يتم تفريع البرنامج بعد أوامر المقارنة (<, =, >) التي تنتج قيمة منطقية 1 أو 0 بناءً على نتيجة مقارنة رقمين. يمكن برمجة أمر اللغة الأساسية MAX ، على سبيل المثال ، على النحو التالي:

: MAX C2 C2< IF+ E2 D ;

تتضمن مجموعة تعليمات الفرع أيضًا تعليمات الاختيار BR ، والتي تتم كتابتها على النحو التالي:

BR A1 P1 A2 P2 ... AK PK ... AN PN ELSE P0

عند تنفيذ هذه التعليمات ، يقوم المعالج أولاً بتنفيذ إجراء المؤشر A1 ويقارن القيمة التي دفعها على المكدس بقيمة القمة السابقة للمكدس تحتها. إذا كانت القيم متطابقة ، فسيتم إزالة العنصرين العلويين من المكدس ويتم تنفيذ الإجراء P1 المرتبط بالمؤشر A1 ، وبعد ذلك يتم الانتقال إلى التعليمات التي تتبع التعليمات BR (على سبيل المثال ، في الإدخال أعلاه ، البرنامج الذي يلي الكلمة P0 في النص). إذا لم تتطابق القيم المقارنة ، فسيتم إزالة عنصر علوي واحد من المكدس (أي نتيجة A1) ويتم تنفيذ نفس الإجراءات مع الزوج A2 P2 ، ثم إذا لم تنجح المطابقة ، مع الزوج A3 P3 ، إلخ. حتى AN PN شاملة. في حالة عدم تطابق أي من المحاولات ، يتم تنفيذ الإجراء P0 المسمى بعد كلمة ELSE. عادة ، تعمل الثوابت الرقمية كإجراءات مؤشر ، على سبيل المثال:

[x] C BR 5 NEG -3 ABS 0 وليس أيضًا T0 [y]

نتيجة لتنفيذ هذا السطر ، سيتم الحصول على القيمة y = -5 في الجزء العلوي من المكدس إذا كانت x = 5 ؛ y = 3 إذا كانت x = -3 ؛ y = 1 إذا كانت x = 0 و y = 0 بخلاف ذلك.

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

كتوضيح لكيفية استخدام عمليات تنفيذ الإجراء الشرطي ، دعنا نعدل إجراء TIME في القسم السابق بحيث يتوقف العداد عند إعطاء شرط معين:

: TIME [t] 1- C IF + TIME؛

الآن هذا الإجراء TIME يستدعي نفسه فقط عندما يكون الجزء العلوي من المكدس موجبًا. سيعمل العداد عدد N بالضبط من المرات إذا احتوت قمة الرأس ، في بداية التنفيذ الأول للوقت ، على رقم موجب N. على سبيل المثال ، للحصول على 7 أعداد ، تحتاج إلى تحديد

7 مرات<ВК>

نظرًا لأن IF + في تعريف TIME ، مثل أي عملية شرطية ، تزيل العنصر الذي تم اختباره من المكدس ، وهذا العنصر ضروري للعمليات اللاحقة ، يجب تكراره عن طريق وضع عملية C (نسخ) قبل IF +.

العودية ليست الوسيلة الأساسية لتكرار تنفيذ الإجراء. لدورات البرمجة بلغة PARADISE ، هناك أوامر RP (كرر - كرر) و DO (Do - do، Perform).

يرشد الأمر RP W إلى تنفيذ الإجراء W مرارًا وتكرارًا لعدد غير محدود من المرات. من أجل وقف التكرار ، يجب أن يحتوي جسم إجراء W على عملية EX (خروج - خروج) يتم تنفيذها في ظل حالة معينة. تنتقل عملية EX إلى تنفيذ الإجراء الذي يتبع نص البرنامج بعد الإجراء المتكرر الذي يحتوي على عملية EX هذه. وبالتالي ، فإن العداد ، الذي تم تنفيذه أعلاه كإجراء تكراري TIME ، يمكن برمجته كتكرار للإجراء W ، والذي يتم تعريفه على النحو التالي:

: W [t] 1- C IF0 EX؛

لجعل العداد يعمل 25 مرة ، تحتاج إلى تنفيذ الخط

إلى جانب عملية EX ، التي تُستخدم في تعليمات التنفيذ الشرطي ، هناك عمليات خروج مشروطة EX- و EX0 و EX + لها نفس تأثير تعليمات IF-EX و IF0 EX و IF + EX ، أي استهلاك العنصر العلوي التي تختبر علامتها ومخارجها إذا كانت العلامة مطابقة لتلك المحددة في تسمية العملية. لا يمكن استخدام العمليات EX ، EX- ، EX0 ، EX + بالضرورة في جسم الإجراء الأكثر تكرارًا (في حالتنا ، W) ، ولكن أيضًا في الإجراءات التي تشير إليها.

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

سيتم تنفيذ البرمجة باستخدام طريقة التطوير من أعلى إلى أسفل. أولاً ، نحدد إجراء GCD الذي يعمل على إصلاح المخطط العام للخوارزمية. معلمات هذا الإجراء عبارة عن رقمين M و N على المكدس ، حيث تم العثور على القاسم المشترك الأكبر. في جسم إجراء GCD ، يجب تحديد عملية دورية لتحويل القيم في المكدس. نتيجة لهذه العملية ، يجب أن يبقى رقمان متساويان في المكدس - يمكن اعتبار أي منهما القاسم المشترك الأكبر. مع وضع هذه الاعتبارات في الاعتبار ، يمكن تعريف إجراء GCD على النحو التالي.

: gcd RP STEP [nod (M، N)، nod (M، N)] D [nod (M، N)]؛

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

: الخطوة C2 C2 - BRS NOP EX E2 C2 - ؛

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

تتسبب عملية اللغة الأساسية DO في تكرار الإجراء المسمى باسمه N مرة ، حيث N هو الرقم الموجود في الجزء العلوي من المكدس في وقت تنفيذ DO. على سبيل المثال ، لكي يتم تنفيذ الإجراء P 8 مرات ، يجب عليك تحديده

8 D.O.P

إذا كانت هناك عملية خروج واحدة على الأقل في جسم الإجراء P وتم استيفاء شرط تنفيذها قبل حدوث العدد المحدد من التكرارات ، فسيتم إنهاء التكرارات بالخروج من الإجراء ، تمامًا كما يحدث في حالة العملية RP. على سبيل المثال ، إذا كرر DO الإجراء المذكور أعلاه W ، الذي يحتوي تعريفه على IF0 EX ، فإن كتابة [T] 30 DO W ستؤدي إلى تكرار 30 W إذا كانت قيمة T> = 30. إذا كان 0

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

لتوضيح استخدام عملية DO ، نحدد إجراء NUM ، الذي يحسب عدد البتات غير الصفرية في الكلمة ذات 32 بت x المحددة في الجزء العلوي من المكدس.

سيتم وضع عداد عدد الوحدات أعلى المكدس. سيتألف عد الوحدات من تكرار إجراء NUMI 32 مرة ، حيث سنقوم بفحص جزء واحد من كلمة x. عند الخروج من الحلقة ، يجب أن يكون الرقم المطلوب أعلى المكدس.

: NUM [x] 0 E2 32 DO NUMI D [N] ؛

لحساب البتات غير الصفرية ، نستخدم حقيقة أن الوحدة في أعلى بت (31) من الكلمة هي علامة على رقم سالب. إذا كانت الكلمة قيد الدراسة سلبية ، فيجب إضافة كلمة إلى N. في نهاية إجراء NUMI ، تحتاج إلى تحويل الكلمة قيد الدراسة قليلاً إلى اليسار.

: NUMI C IF- N + SHL ؛

إن تنفيذ إجراء N + بسيط للغاية: تحتاج إلى إضافة واحد إلى أعلى المكدس دون تغيير الجزء العلوي.

: N + E2 1+ E2 ؛

يمكن أن تحتوي الإجراءات المتكررة على عمليات RP و DO في أجسامهم ، مما يؤدي إلى حلقات متداخلة ، ويسمح بأي عمق للتداخل. في هذه الحالة ، توجد عملية EXT للخروج من الحلقة المتداخلة ، مما يشير إلى عمق التداخل في الجزء العلوي من المكدس. على سبيل المثال ، يمكن تحديد الخروج من حلقتين متداخلتين على النحو التالي:

يجب أن يؤخذ في الاعتبار أن استخدام الأمر EXT يتطلب عناية متزايدة ، لأنه عند تعديل البرنامج ، قد يتغير عمق تداخل الحلقات وسيتعين تغيير الثابت المقابل قبل EXT.

البيانات المسماة

مكدس المعامل هو الآلية الرئيسية ، ولكنها ليست الآلية الوحيدة لمعالجة البيانات في أوراق PRSP. من الممكن أيضًا ، جنبًا إلى جنب مع تعريفات الإجراءات ، الإعلان عن العناصر والمجموعات المنظمة بشكل قياسي لعناصر البيانات (ما يسمى الهياكل) ، والتي تكون متاحة بعد ذلك للاستخدام من خلال أسمائها. من خلال تنفيذ إعلانات البيانات ، يحتفظ المعالج بالذاكرة المطلوبة لتخزينها ويوفر الآليات اللازمة للوصول إلى هذه الذاكرة.

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

تعلن كلمة VAR عن متغير رقمي 16 بت. على سبيل المثال ، الإدخال

يعلن عن متغير X ، أي يخبر المعالج أن الاسم X هو اسم متغير. يقرن المعالج بهذا الاسم موقع ذاكرة 16 بت سيخزن قيمة هذا المتغير. تعليمات تعيين القيمة للمتغير X ، الموجود في الجزء العلوي من حزمة المعامل ، هي

بتنفيذ هذا الأمر ، يزيل المعالج العنصر العلوي من المكدس ويكتب قيمته في الخلية المخصصة للمتغير X.

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

كمثال ، نقدم نسخة أخرى من إجراء GCD الذي تمت مناقشته أعلاه ، حيث يتم استخدام متغيرين للعمل.

: إيماءة! X! Y RP STEP X [GCD] ؛

: STEP X Y = EX + X Y BR + X-Y Y-X ؛

: X-Y X Y -! X ؛

: Y-X Y X -! ص ؛

كما ترى ، أصبح البرنامج أطول إلى حد ما ، لكن وضوحه زاد.

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

9 VCTR ROW ، يحتفظ المعالج بـ 10 كلمات ذاكرة 16 بت قابلة للعنونة بشكل تسلسلي ، مما يشكل متجه ROW (0: 9). أولاً ، يتم دفع الرقم 9 إلى المكدس ، ثم يتم تنفيذ إجراء VCTR ، باستخدام العنصر العلوي للمكدس لتحديد طول متجه ROW المراد إنشاؤه.

الضغط على المكدس قيمة العنصر j من المتجه ROW ، 0<=j<=9, задается командой

[j] ROW

باستخدام رقم العنصر في المكدس كمعامل ، يتسبب اسم المتجه ROW في استبدال هذا الرقم بقيمة العنصر المقابل. إذا كانت هناك كلمة! مباشرة قبل اسم متجه ROW ، فإن عنصر هذا المتجه المشار إليه بالرأس يتم تعيين قيمة subvertex ، ويتم تقليل عمق المكدس بمقدار 2. على سبيل المثال ، يمكنك إعادة تعيين الخامس عنصر متجه ROW على النحو التالي:

هناك أيضًا إمكانية الجمع بين المتجهات الثابتة ، أي متجهات من أرقام 16 بت التي يتم تحديد قيمها عند الإعلان عنها ولا تتغير في المستقبل. وبالتالي ، يتم الإعلان عن متجه من ثوابت 16 بت VC بطول L + 1 باستخدام كلمة CNST في الشكل:

CNST VC k0 k1 ... kL ؛

حيث k0، k1، ... kL هي أوامر تدفع قيمة واحدة إلى المكدس. غالبًا ما تكون هذه مجرد أرقام حرفية ، ولكن قد تكون هناك أيضًا أسماء للمتغيرات والإجراءات بالإضافة إلى الأوامر التي تتكون من أزواج من الكلمات ، مثل ، على سبيل المثال ، أمر إرسال عنوان المتغير "X" الذي تمت مناقشته أدناه .يتم الوصول إلى عناصر المتجه الثابت بنفس الطريقة التي يتم بها الوصول إلى مكونات المتجهات المنتظمة ، على سبيل المثال:

يتم الإعلان عن مصفوفة متعددة الأبعاد من كلمات 16 بت بكلمة ARR ، مسبوقة بقيم الفهرس القصوى لكل بُعد وعدد الأبعاد. على سبيل المثال ، يتم التصريح عن المصفوفة ثلاثية الأبعاد TIR (0: 8،0: 2،0: 24) على النحو التالي:

الرقم 3 قبل ARR مباشرة يشير إلى أبعاد المصفوفة المصرح عنها.

يتم تحقيق دفع عنصر من المصفوفة على المكدس من خلال إعطاء فهرس هذا العنصر ، متبوعًا باسم المصفوفة. على سبيل المثال ، يتم التعبير عن الأمر بدفع عنصر TIR (0،2،2) على المكدس كـ

وفقًا لذلك ، يتم تعيين القيمة الحالية لأعلى المكدس لهذا العنصر بواسطة الأمر

أوضحت جميع الأمثلة المدروسة إنشاء هياكل من كلمات ذات 16 بت. ومع ذلك ، تسمح اللغة أيضًا بتعريف هياكل الكلمات ذات 32 بت و 8 بتات. للقيام بذلك ، تكون الكلمة التي تحدد البنية مسبوقة بـ LONG أو BYTE ، على التوالي. على سبيل المثال،

5 BYTE VCTR X - تعريف متجه X مكون من 6 بايتات ؛

BYTE CNST Y 65 66 67 ؛ - تعريف ثابت ناقل البايت المكون من 3 مكونات Y ؛

10 20 2 LONG ARR MTRX - تعريف مصفوفة الكلمات الطويلة MTRX (0: 10: 20).

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

على الرغم من استخدام تنسيق الكلمات 16 بت عند تعريف البيانات افتراضيًا ، إلا أنه يحتوي أيضًا على الترميز WORD. يُنصح باستخدام هذه البادئة عندما يُفترض أن يتم نقل البرنامج إلى أجهزة أخرى ، حيث يتم أيضًا تنفيذ DSSP وقد يكون الإعداد الافتراضي مختلفًا.

غالبًا ما تُستخدم هياكل بيانات البايت لتخزين المعلومات النصية ومعالجتها. ويرجع ذلك إلى حقيقة أنه تم تخصيص بايت واحد في ذاكرة الكمبيوتر لتشفير حرف واحد. لتعيين رموز الأحرف في لغة الجنة هناك بناء #l ، حيث l هو أي حرف متاح على لوحة مفاتيح الكمبيوتر. يدرك معالج DSSP هذا البناء كأمر لدفع الحرف l إلى المكدس. على سبيل المثال:

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

BYTE CNST Y #A #B #C ؛

غالبًا ما يكون من المناسب استخدام الترميز الرمزي لثابت رقمي في برنامج ما. لتوفير هذا الاحتمال ، توجد كلمة تعريف VALUE:

يقوم هذا الأمر بإخراج العنصر العلوي من المكدس ويشكل الكلمة بالاسم الذي يلي VALUE مباشرةً. استخدام هذه الكلمة يعادل استخدام ثابت عددي. على سبيل المثال:

العمل مع الذاكرة عن طريق العناوين المادية

توفر الأدوات المدروسة إمكانية تسمية البيانات ومعالجة البيانات بغض النظر عن نظام العنوان للكمبيوتر. لكن اللغة الأساسية تتضمن أيضًا أدوات تسمح لك بمعالجة عناوين عناصر الذاكرة. يتم دفع عنوان متغير أو عنصر صفيف X إلى المكدس بواسطة الأمر

في حالة عنصر المصفوفة ، يُسبق هذا الأمر بقيمة الفهرس (الفهارس).

يستبدل تعليمة اللغة الأساسية @ عنوان كلمة ذاكرة طويلة في أعلى المكدس بالقيمة التي تحتويها الكلمة الطويلة. على سبيل المثال ، يمكن دفع قيمة المتغير Y إلى المكدس بتنفيذ السطر التالي:

تستبدل تعليمةB العنوان بقيمة البايت المقابل ، بافتراض أن البايتات العالية لأعلى المكدس تساوي صفرًا ، وتستبدل تعليمة @ L العنوان بكلمة 32 بت.

هناك أيضًا تعليمات لكتابة القيم في الذاكرة. يكتب الأمر! T القيمة 16 بت sub-top إلى العنوان المنبثق من أعلى المكدس. يؤدي الأمر! TB إلى كتابة مشابهة للبايت المنخفض للعقدة الفرعية إلى البايت الذي تعينه العقدة ، ويكتب! TL الكلمة ذات 32 بت للعقدة الفرعية إلى الكلمة التي تعالجها العقدة. على سبيل المثال ، يمكنك تعيين القيمة 15 للعنصر الخامس من متجه البايت BV (0: 5) باستخدام الأوامر التالية:

15 5 "B.V. TB

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

البيانات الإضافية وعمليات الذاكرة

من أجل الحصول على قدر أكبر من الكفاءة والاكتناز للبرامج ، تم إدخال العمليات التالية في لغة PARA:

0 <имя переменной>- إعادة ضبط المتغير ؛

1 <имя переменной>- تخصيص وحدة لمتغير ؛

1- <имя переменной>- إنقاص قيمة المتغير بمقدار واحد ؛

1+ <имя переменной>- زيادة قيمة المتغير بمقدار واحد ؛

!- <имя переменной>- طرح قيمة الجزء العلوي من المكدس من المتغير ؛

!+ <имя переменной>- أضف قيمة الجزء العلوي من المكدس إلى المتغير.

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

0 X يساوي 0! X

1+ X تعادل X 1+! X

X تعادل X E2 -! X

يزيد استخدام هذه العمليات من كفاءة البرامج ووضوحها.

من الناحية العملية ، غالبًا ما يكون من الضروري تعيين قيمة واحدة لجميع عناصر المصفوفة. هناك عملية لهذا في لغة الجنة !!!<имя массива>. يتمثل عملها في تعيين قيمة الجزء العلوي من المكدس لجميع مكونات المصفوفة المحددة. عملية!!! قابلة للتطبيق على المصفوفات التي تحتوي على عناصر من أي تنسيق.

مثال على الاستخدام:

تتم كتابة رمز الحرف "مسافة" إلى كافة مكونات صفيف بايت BUF.

غالبًا ما يكون من الضروري الحصول على معلومات حول بنية البيانات وراء الاسم في البرنامج. زوج من الأوامر الحجم؟ - أعط تنسيق عنصر البيانات: 1 ، 2 أو 4 بايت ، و DIM؟ - إرجاع عدد عناصر البيانات في الهيكل. على سبيل المثال ، إذا تم التصريح عن البيانات

3 4 2 LONG ARR Z

ثم فيما يتعلق بهم ، ستعطي هذه الأوامر النتيجة التالية (الأرقام العشرية):

مقاس؟ X SIZE؟ حجم Y؟ ض

خافت؟ X خافت؟ Y خافت؟ ض

تتضمن مجموعة تعليمات معالج DSSP ، كإضافة ، أربعة تعليمات تسمح لك بقراءة وكتابة أجزاء فردية من خلايا ذاكرة الكمبيوتر. هذه هي أوامرBI ،! BI ،! BI0 ،! BI1. المعلمات لكل منها هي عنوان كلمة الذاكرة في المكدس وعدد البتات في هذه الكلمة (تذكر أن البتات مرقمة من اليمين إلى اليسار ، بدءًا من الصفر). يفترض الأمر! BI أيضًا التواجد على المكدس وقيمة البت المراد كتابته. يستبدل الأمرBI المعلمات المحددة بقيمة البت المحدد (0 أو 1) ، ويقوم الأمران! BI0 و! BI1 بتعيين القيمة 0 و 1 للبت المحدد ، على التوالي ، وإزالة معلماتهما من المكدس ، و يضبط الأمر BI البت المحدد على أقل بت أهمية للعنصر الثالث للمكدس ويزيل جميع معلماته الثلاثة من المكدس. على سبيل المثال ، إذا كانت قيمة المتغير X هي الرقم الثنائي 101101 ، فإن نتائج العمليات المدرجة ستكون على النحو التالي:

"X [addr. X] 3BI - البتة الثالثة من X ، 0" X 3! BI - X هي 100101 ،

"X [addr.X] 0! BI0 - X تساوي 100100 ،

"X [addr.X] 1! BI1 - X هي 100110.

تحتوي لغة PARADISE أيضًا على تسهيلات للعمل مع سلاسل البايت الموجودة في الذاكرة. لتحديد سلسلة من البايتات ، يتم دفع معلمتين إلى المكدس: عنوان بداية السلسلة (أي عنوان بايتها الأول) وطول السلسلة (عدد البايتات الموجودة فيها).

يتم استخدام الأمر !!! MB لتعيين كل بايتات السلسلة إلى قيمة واحدة (معطاة في المكدس). يستهلك ثلاث معلمات من المكدس: ، حيث b هي القيمة التي سيتم تعيينها ، و a و l هما عنوان البداية وطول سلسلة البايت ، على التوالي. دعنا ، على سبيل المثال ، تحتاج إلى استبعاد العناصر من الصف الثالث إلى الصف العاشر بايت TXT (0:20). للقيام بذلك ، يمكنك تشغيل السطر التالي:

0 3 "TXT 8 !!! ميغابايت

نتيجة لذلك ، ستتلقى ثمانية عناصر متتالية من المصفوفة المحددة ، بدءًا من الصف الثالث ، القيمة 0. أمر مشابه !!! تم تصميم MW لملء سلسلة من الكلمات ذات 16 بت بنفس القيمة (عدد الكلمات يشار إلى أعلى المكدس) ، والأمر! !! م - لملء سلسلة من الكلمات الطويلة.

يرسل الأمر! SB سلاسل البايت. معلماته هي: ، حيث a1 و l هما عنوان البداية وطول السلسلة المعاد توجيهها ، a2 هو عنوان البداية للسلسلة التي يتم إعادة التوجيه إليها. نتيجة لتنفيذ الأمر! SB ، سيتم وضع سلسلة بايت بطول l في الذاكرة من العنوان a2 ، وهو نسخة طبق الأصل من السلسلة الموجودة في العنوان a1 قبل إجراء النقل. قد تتداخل سلسلة المصدر وسلسلة الوجهة. دعنا ، على سبيل المثال ، تريد نقل عناصر مصفوفة البايت M (0:10) على النحو التالي: M (10): = M (9) ، M (9): = M (8) ، ... ، م (1): = م (0). للقيام بذلك ، يمكنك استخدام الأمر!

0 "م 10 C2 1+! SB

نتيجة لذلك ، سيتم نقل سلسلة من 10 بايت بمقدار بايت واحد في اتجاه زيادة عناوين الذاكرة.

يعتبر الأمر! SB مناسبًا للعمل مع سلاسل الأحرف (تذكر أن كل حرف تم ترميزه ببايت واحد). يسمح ، على سبيل المثال ، بتعيين قيمة سلسلة حرفية معينة بشكل صريح إلى مصفوفة بايت. لتحديد مثل هذه السلسلة ، يتم استخدام نص حرفي ، أي تسلسل مقتبس من الأحرف ، مثل "TEXT LITERAL". هذا البناء ، عند مصادفته في برنامج ، يتسبب في دفع عنوان البداية وطول سلسلة البايت التي تحتوي على النص المقتبس إلى المكدس. يمكن بعد ذلك استخدام هذه الخيارات مع! SB الأمر. على سبيل المثال ، سيؤدي الجزء "TABLE" 0 "TN! SB إلى نقل" TABLE "الحرفي إلى صفيف TN.

يبحث الأمر SRCHB عن بايت معين في سلسلة. المعلمات: حيث b هو البايت الذي يتم العثور على أول ظهور له ، يحدد a و n عنوان البداية وطول السلسلة المراد البحث عنها ، على التوالي. إذا كانت n> 0 ، فسيتم إجراء البحث من العنوان a إلى العنوان a + n-1 (في اتجاه زيادة العناوين) ، إذا كان n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "TEXT" SRCHB

#A "TEXT" SRCHB

#E "TEXT" [# E، a، 4] 1- + -4 [# E، a + 3، -4] SRCHB [-2]

الانتهاء من مراجعة وسائل العمل مع البيانات ، دعونا نتناول المشكلة المتعلقة بتخزين البيانات في الذاكرة الخارجية للكمبيوتر ، أي على الأقراص الممغنطة. لغة الجنة لديها أمر حفظ<имя файла>يوجّه إلى تخزين نسخة من ذاكرة النظام الرئيسية على القرص ، جنبًا إلى جنب مع الكائنات المعرفة من قبل المستخدم. في هذه الحالة ، لا يتم عرض مناطق الذاكرة المخصصة للبيانات بواسطة عمليات VAR و VCTR و ARR على القرص. نتيجة لذلك ، عند تحميل النظام المحفوظ من القرص ، لا يتم تحديد قيم البيانات المحددة (يجب تحديدها أثناء تنفيذ البرنامج). في معظم الحالات ، يكون هذا مبررًا ، حيث لا توجد حاجة لإنفاق مساحة على القرص لتخزين متغيرات العمل ، والمخازن المؤقتة ، وما إلى ذلك. ومع ذلك ، هناك بيانات يجب تحديد قيمها فور قيام النظام بالتمهيد من القرص. مثال على ذلك هو متغير يخزن سرعة تبادل البيانات مع بعض الأجهزة الخارجية. عند التبديل إلى سعر صرف آخر ، يكفي تغيير قيمة هذا المتغير دون إجراء أي تصحيحات على البرنامج.

الإشارة إلى المعالج أن قيم عناصر بعض بنية البيانات يجب كتابتها على القرص في الأمر SAVE هي بادئة FIX الموضوعة قبل تعريف الهيكل ، على سبيل المثال

FIX VAR SPEED 20 FIX BYTE VCTR TABL

لا يختلف العمل مع هياكل البيانات المحددة بهذه الطريقة عن العمل مع الهياكل المحددة بالطريقة المعتادة.

أوامر التحكم في المعالج

في لغة PARADISE ، توجد مجموعة صغيرة من الأوامر المصممة للتحكم في معالج PRSP ، أو بالأحرى محاكي معالج PRSP.

يؤدي الأمر RESTART إلى إعادة تشغيل المعالج. في هذه الحالة ، يتم مسح المكدس ، يتم عرض رسالة

إصدار DSSP XX.XX.XX

XXXXXW مجاني

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

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

توقف لا تعرف<слово> .

حيث النقطة هي موجه معالج PRSP ، مما يشير إلى أن المعالج في حالة توقف لكلمة غير محددة. في هذا الوضع ، يمكنك تنفيذ أي أوامر معالج ، تمامًا كما هو الحال في الوضع العادي ، عندما تكون العلامة النجمية هي الموجه. هناك طريقتان للخروج من هذا الوضع - إما عن طريق تنفيذ الأمر \ G (ثم يواصل المعالج تنفيذ الإجراء المتقطع ، وتخطي الكلمة غير المحددة) ، أو عن طريق الأمر RESTART.

أمر EXEC يوجه المعالج إلى تنفيذ الإجراء الذي يكون عنوانه أعلى المكدس. للحصول على عنوان إجراء ، استخدم الأمر "" (فاصلتان فاصلتان) متبوعًا باسم الإجراء. على سبيل المثال ، نتيجة لتنفيذ الأمر

سيتم دفع عنوان إجراء ABS على المكدس. تسمح لك هذه الأوامر بتمرير إجراء كمعامل إلى إجراء آخر.

تنتمي عملية الحفظ التي سبق ذكرها إلى مجموعة أوامر التحكم في المعالج.<имя файла>، تعليمات لحفظ نسخة من النظام على القرص ، بالإضافة إلى الأوامر التي تحدد مصدر إدخال معلومات النص المقدمة للمعالج. في البداية ، هذا المصدر هو لوحة مفاتيح العرض.

أمر LOAD<имя файла>يبدل الإدخال إلى ملف القرص بالاسم المحدد. الأمر PF - يوجه لإدخال الأوامر من المخزن المؤقت لمحرر النصوص. يرسل الأمر TEXEC سلسلة نصية إلى إدخال المعالج ، يتم تحديد معلماتها في المكدس. عند تنفيذ الأوامر الموجودة في المصادر المحددة ، يتحول الإدخال تلقائيًا إلى لوحة مفاتيح الشاشة.

أوامر إدارة القاموس

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

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

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

في سياق نمو القاموس ، من الممكن تكوين قواميس فرعية - مجموعات مسماة من مدخلات القاموس. عادةً ما يجمع قاموس فرعي الإجراءات وهياكل البيانات المتعلقة بالمهمة نفسها. لتجنب الخلط بين أسماء القواميس الفرعية وعناصر البرنامج الأخرى ، يجب أن يبدأ اسم قاموس فرعي بالحرف $. يمكن فتح وإغلاق الوصول إلى القواميس الفرعية لنموها أو استخدامها باستخدام أوامر خاصة ، والتي تتضمن ما يلي (الاسم $ v يعني أي قاموس فرعي صالح).

GROW $ v - قم بتنمية قاموس $ v الفرعي ، أي ، حتى يتم تحديد خلاف ذلك ، ضع أسماء جميع الإجراءات والبيانات المترجمة في قاموس فرعي $ v ؛

USE $ v - مفتوح للاستخدام (للبحث عن الأسماء فيه) $ v subdictionary؛

SHUT $ v - أغلق إمكانية استخدام قاموس فرعي $ v ؛

فقط $ v - اجعل القاموس الفرعي $ v متاحًا للاستخدام ؛

إلغاء - إلغاء الأخير فقط.

يوجد أيضًا الأمر؟ $ الذي يطبع على شاشة العرض أسماء جميع القواميس الفرعية لولايتها - سواء كان قاموس البحث الفرعي مفتوحًا أم مغلقًا. دائمًا ما يتم زيادة القاموس الفرعي الذي تمت طباعة اسمه في الأعلى.

تشكل إجراءات أوراق PRIME الأساسية قاموسًا فرعيًا باسم $ PRIME ، مفتوحًا للاستخدام والنمو افتراضيًا ، أي إذا لم يكن هناك أمر لتوجيه قاموس فرعي مختلف للنمو.

دعنا ، على سبيل المثال ، العملية؟ $ طباعة الحالة التالية من القواميس الفرعية.

$ PRG مفتوح

تم فتح $ PRIME

إغلاق $ EDIT

تم فتح $ PRIME

النظام مغلق

هذا يعني أن $ PRG مفتوح حاليًا للزيادة والاستخدام ، و $ PRIME للاستخدام فقط ، و $ EDIT و SYSTEM غير متاحين. لاحظ أن قاموسًا فرعيًا يمكن أن يتكون من عدة أقسام تحمل الاسم نفسه.

توجد أوامر لحذف مجموعة أو أخرى من إدخالات القاموس من القاموس ، وربما الكائنات الداخلية المرتبطة بها. وبالتالي ، فإن الأمر FORGET $ v يزيل جميع الأسماء التي تم إدخالها في القاموس (وليس فقط القاموس الفرعي $ v) منذ آخر تنفيذ للأمر GROW $ v ، جنبًا إلى جنب مع الكائنات المشار إليها بهذه الأسماء ، ويلغي نمو $ v القاموس الفرعي الذي تم تعيينه. ينفذ الأمر PROGRAM $ v نفس الإجراءات مثل أوامر FORGET $ v GROW $ v المتسلسلة. يؤدي وجود مثل هذا الأمر في بداية أي برنامج إلى حقيقة أنه عند إعادة تجميع البرنامج ، سيتم حذف نسخته القديمة وسيتم تكوين قاموس فرعي لتخزين كائنات النسخة الجديدة من البرنامج. على سبيل المثال ، عند إجراء عملية FORGET $ PRIME على القاموس الذي تم عرض حالته أعلاه ، نحصل على حالة جديدة:

إغلاق $ EDIT

تم فتح $ PRIME

النظام مغلق

أثناء تنفيذ الأمر FORGET ، يتم عرض أسماء الأقسام المراد حذفها.

لاحظ أن اسم قاموس النظام الفرعي لا يبدأ بـ $. هذا مسموح به ، لكنه يؤدي إلى حقيقة أن تطبيق الأمرين FORGET و RPOGRAM على هذا القاموس الفرعي لا يسبب أي إجراءات (يبدو أن قاموس SYSTEM الفرعي غير موجود بالنسبة لهم).

في ضوء حقيقة أن الغالبية العظمى من الإجراءات في البرنامج النهائي لا تتطلب الوصول باسم خارجي ، فمن الممكن إزالة أسمائهم من القاموس مع الحفاظ على الكائنات الداخلية المرتبطة بها. يزيل الأمر CLEAR $ v جميع الأسماء من جميع أقسام قاموس $ v الفرعي ، باستثناء تلك التي سبقها في نص البرنامج (عندما تم تعريفها) بالبادئة :: (نقطتان). على سبيل المثال ، نتيجة تنفيذ جزء البرنامج التالي بواسطة المعالج:

::: X + Y! + X ؛

CLEAR $ EXAM فقط الأسماء X و X + ستبقى في قاموس $ EXAM الفرعي ، ستتم إزالة إدخال القاموس Y (على الرغم من أن المتغير المقابل للكلمة Y في التمثيل الداخلي سيبقى).

أوامر الإدخال / الإخراج

الوسيلة الرئيسية لتفاعل المستخدم مع DSSP هي المحطة الطرفية ، والتي عادة ما تكون عبارة عن شاشة عرض أشعة الكاثود مع لوحة مفاتيح. من الجهاز ، يتم تنفيذ الإدخال الأولي وتحرير وتصحيح البرامج وإعداد البيانات وجميع إدارة النظام. يتم تخزين البرامج والبيانات ، وكذلك أوراق PRSP نفسها ، كملفات على أقراص ويمكن طباعتها على طابعة. للتحكم في الإدخال / الإخراج ، تتضمن مجموعة إجراءات أوراق استراتيجية الحد من الفقر الأساسية الأدوات الموضحة أدناه.

يتم توفير برمجة العملية الطرفية من خلال أوامر لإدخال وإخراج الأرقام والحروف الفردية وتسلسل الأحرف (السلاسل) ، بالإضافة إلى بعض الأوامر الإضافية.

يبدأ الأمر TIB (Terminal Input Byte) حلقة انتظار لضغط مفتاح على لوحة مفاتيح الجهاز. عند الضغط على مفتاح ، يتم دفع كود 8 بت للحرف المقابل إلى المكدس باعتباره البايت المنخفض من الأعلى ، مع 3 بايت العلوية تحتوي على أصفار. يتم عرض نسخة من الحرف الذي تم إدخاله بهذه الطريقة على الشاشة. يوجد أيضًا أمر TRB (Terminal Read Byte) ، والذي يختلف عن TIB في أن إرسال رمز الحرف الذي تم إدخاله إلى المكدس غير مصحوب بعرض هذا الحرف على الشاشة.

يبدأ الأمر TIN (رقم إدخال المحطة الطرفية) دورة من الإدخال إلى المكدس ويعرض على شاشة عرض الرقم المكتوب من لوحة المفاتيح. يجب أن يكون رقم الإدخال عبارة عن سلسلة من الأرقام التي يمكن أن تبدأ بعلامة ناقص وتنتهي بـ . اعتمادًا على مجموعة وضع الإدخال / الإخراج ، ينظر المعالج إلى الأرقام على أنها ست عشري أو عشري أو ثماني أو ثنائي. إذا كان الرقم السداسي العشري يبدأ برقم ، يُشار إليه بحرف ، فسيتم إضافة الرقم 0 قبله. مع اقتصاص البتات الموجودة على يسار البت الأكثر أهمية الذي يبلغ وزنه 2 أس 31.

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

يتم إدخال تسلسل يحتوي على n من الأحرف المكتوبة من لوحة المفاتيح في ذاكرة الكمبيوتر على شكل n بايت الموجودة في عناوين متزايدة بشكل متسلسل ، بدءًا من العنوان أ ، باستخدام الأمر TIS (سلسلة الإدخال الطرفية) ، قبل ذلك العنوان أ والرقم من الأحرف n يتم دفعها إلى المكدس. لنفترض ، على سبيل المثال ، عن متجه البايت X بطول كافٍ. تحتاج إلى إدخال 9 أحرف ، مع تخصيص قيمها لعناصر هذا المتجه ، بدءًا من عنصر الصفر:

وبالمثل ، باستخدام الأمر TOS ، يتم تحديد إخراج تسلسل من لترات n بايت مع عنوان البداية a:

يتم توفير الإخراج إلى المحطة الطرفية لعناصر النص المضمنة مباشرة في البرنامج من خلال الإنشاء

."<текст>"

على سبيل المثال ، لكي يظهر النص ENTER VARIANT NUMBER على الشاشة عند تنفيذ جزء معين من البرنامج ، يجب أن يحتوي الجزء على الإدخال "ENTER VARIANT NUMBER".

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

يطبع الأمر TOB (بايت الإخراج الطرفي) الحرف الذي يُعطى رمزه بالبايت المنخفض لأعلى المكدس. يتم تقليل عمق المكدس بمقدار 1.

هناك أيضًا أوامر تتحكم مباشرةً في مؤشر العرض:

CR - الانتقال إلى بداية سطر جديد ،

SP - الفضاء ، أي تحريك موضع واحد إلى اليمين.

يتسبب الأمر BELL في إصدار صوت تنبيه قصير ("جرس").

في بعض الأحيان ، عند الاتصال بجهاز طرفي ، قد يكون من الضروري التحقق مما إذا كان قد تم الضغط على أحد المفاتيح بالفعل وما إذا كانت الشاشة قد أكملت بالفعل أمر الإخراج السابق. يمكن القيام بذلك باستخدام أوامر TTI (إدخال اختبار المحطة الطرفية) و TTO (إخراج اختبار المحطة الطرفية) ، والتي تترك علامة 1 على المكدس إذا حدث الحدث المحدد ، و 0 بخلاف ذلك.

تتشابه أوامر إخراج الطابعة مع أوامر الإخراج الطرفية وتستند إلى ذاكري مشابه حيث تم استبدال الأحرف LP (طابعة الخط) بـ TO أو إضافتها كأحرف بادئة. على سبيل المثال ، LPCR - الانتقال إلى بداية سطر جديد ، LPSP - مسافة ، LPN - إخراج رقم من subvertex في الحقل المحدد بواسطة الرأس ، LPB - إخراج حرف ، LPS - إخراج سلسلة من الأحرف . يوجد أيضًا الأمر [N] LPT ، الذي يحرك رأس الطباعة إلى الموضع N للخط المطبوع ، وأمر LPFF ، الذي يغذي الورقة. لطباعة نص صريح ، من الملائم استخدام النص الحرفي وأمر LPS ، على سبيل المثال:

"جدول قيمة الوظيفة" LPS

معالجة المقاطعة والاستثناءات

عند برمجة الأجهزة الطرفية ، يصبح من الضروري التعامل مع المقاطعات. في DSSP ، تتم برمجة هذه المعالجة على النحو التالي. البرنامج المصمم للتعامل مع المقاطعة هو إجراء عادي لأوراق PRSP ، قبل تعريفه يوجد بادئة INT ، على سبيل المثال INT: A! 1+ I؛ تضمن بادئة INT حفظ حالة المعالج عند مقاطعته واستعادته عند اكتمال المقاطعة.

يتم استخدام الأمر LINK لربط روتين بمقاطعة معينة:

<адрес вектора>وصلة<имя процедуры>أثناء التنفيذ ، وفقًا للمتجه المقابل ، يتم تسجيل استدعاء لإجراء معالجة المقاطعة. يمكن لتعليمات LINK أن تؤدي كلاً من الربط الثابت لإجراء ما مع مقاطعة ، والتي تحدث في وقت تجميع البرنامج ، وديناميكيًا ، عند تنفيذ البرنامج.

مقاطعة المعالج هي الطريقة التي يتم بها إبلاغ النظام بحدث وقع في العالم الخارجي. يمكن أن تحدث الأحداث التي تتطلب معالجة فورية أيضًا في البرنامج. يطلق عليهم مواقف استثنائية. أمثلة على مثل هذه الحالات: القسمة على الصفر ، خطأ الاتصال بالجهاز ، نهاية ملف الإدخال ، إلخ.

في DSSP ، يتم إصلاح المواقف الاستثنائية باستخدام مقاطعات الأوامر. مقاطعة الأمر هي عملية استدعاء إجراء استجابة مسمى ويتم إعلانها على النحو التالي:

فخ<имя вызова> <конечная реакция>

على سبيل المثال:

TRAP S1 الوضع S1.

في الحالة الأولى ، يكون رد الفعل النهائي للمقاطعة S هو الإجراء X ، وفي الحالة الثانية ، عند حدوث المقاطعة S1 ، سيتم عرض الرسالة التالية على الجهاز: الوضع S1.

يمكن للبرنامج الذي من المحتمل أن يتسبب في مقاطعة تعيين استجابته له باستخدام أمر catch. هناك نوعان من عمليات الاعتراض في أوراق PRSP: ON و EON. لا يمكن استخدام أوامر الاعتراض إلا داخل الإجراءات ولها التنسيق:

على<имя прерывания> <реакция>

دهر<имя прерывания> <реакция>على سبيل المثال:

: A ... ON S. "Interrupt S" ... ؛

: A1 ... EON S1 ABC ... ؛

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

ضع في اعتبارك الأمثلة. يقوم الإجراء M بإدخال الأحرف من لوحة المفاتيح الطرفية والتحقق مما إذا كانت رقمًا. إذا لم يكن الحرف الذي تم إدخاله رقمًا ، فسيتم رفع مقاطعة ND. TRAP ND "ليس رقمًا". : M RP M1 ؛ : M1 TRB [B] C # 0< C2 #9 >& 0 IF + ND [B] TOB؛

الرد الأخير على مقاطعة ND هو الرسالة: ليس رقمًا.

إذا تم استدعاء M من إجراء P1 له استجابته الخاصة لمقاطعة ND: P1 ON ND PR1 M ؛ : PR1 [B] CR. "خطأ". د # 0 [# 0] ؛ ثم عند إدخال حرف غير رقمي ، ستتم معالجة مقاطعة ND بواسطة برنامج التفاعل PR1 من النوع ON ، مما يؤدي إلى إصدار الرسالة من سطر جديد: Error. سيتم استبدال الحرف الذي تم إدخاله بالحرف 0 ، وبعد ذلك سيستمر M في العمل.

إذا تم استدعاء M من الإجراء P2: P2 EON ND PR2 M ؛ : PR2 CR. "خطأ. نهاية الإدخال." ؛ ثم عند إدخال حرف غير رقمي ، ستتم معالجة مقاطعة ND بواسطة برنامج تفاعل PR2 من نوع EON ، مما يؤدي إلى إصدار الرسالة من سطر جديد: خطأ. نهاية الإدخال. وبعد ذلك سيتم الخروج من P2. سيكون مكدس المعامل فارغًا بعد ذلك.

إذا لزم الأمر ، يمكن إعادة تنشيط المقاطعة في برنامج التفاعل ، وبالتالي توسيعها إلى البرامج ذات المستوى الأعلى. في هذه الحالة ، إما أن البرنامج المحدد في أمر التقاطع في إجراء التضمين أو رد الفعل النهائي سوف يتعامل مع المقاطعة. على سبيل المثال ، إذا قمت بتعديل PR2 على النحو التالي:: PR2 CR. "خطأ. نهاية الإدخال." اختصار الثاني.؛ ثم ستكون الرسالة المعروضة على المحطة هي: خطأ. نهاية الإدخال. ليس رقما.

يحتوي DSSP على العديد من مقاطعات الأوامر المضمنة ، ويمكن توفير الاستجابة لها في برامج المستخدم.

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

وعليكم السلام ورحمة الله وبركاته!

الطبراني في "الأوسط" بحسب رواية أبو هريرة:
قال رسول الله صلى الله عليه وسلم: أنا عربي القرآن بالعربية ولغة الجنة لغة عربية.

أحضره الشيخ الألباني إلى سلسلة الضعيفة برقم 161 فقال:

هذا الحديث موضوع. في الواقع ، لا يوجد حديث واحد موثوق به يشرح اللغة التي سيتحدث بها أهل الجنة ، لذلك لا بد من التزام الصمت وعدم الانغماس في الأحاديث حول هذه المسألة ، وإعطاء العلم عنها إلى الله تعالى ، والانخراط في ما يشاء فقط. تؤدي إلى ارتكاب تلك الأعمال التي تعود بالنفع على العالم الآخر!
وقد سئل شيخ الإسلام ابن تيمية رحمه الله: ما اللغة التي يتكلم بها الناس يوم القيامة؟ هل يخاطب الله الناس بالعربية؟ وهل التأكيد على أن لغة أهل النار هي لغة فارسية ، وأهل الجنة عرب؟
فقال: الحمد لله رب العالمين! ليس معروفًا ما هي اللغة التي سيتحدث بها الناس في ذلك اليوم ، وكيف وبأي لغة سيخاطبهم ربهم ، فهو عظيم ومجد. ولم يخبرنا الله تعالى ولا رسوله صلى الله عليه وسلم بشيء عن ذلك ، ولا يعول على أن لغة أهل النار ستكون فارسية ، ولغة أهل الجنة هي العربية. ولا نعلم أن في هذا الأمر بين الصحابة رضي الله عنهم خلاف. بل على العكس امتنعوا عن ذلك لأن الحديث عنه لا جدوى منه. ومع ذلك ، كان هناك خلاف بين الأجيال اللاحقة بشأن هذه المسألة. قال البعض إنهم سيتواصلون بالعربية ، وآخرون قالوا إن هذا لا ينطبق على أهل الجحيم ، لأنهم سيجيبون بالفارسية وهذه لغتهم في الجحيم. ثالثًا ، سيتواصل الناس باللغة الآشورية ، لأنها لغة آدم ، التي تنحدر منها جميع اللغات الأخرى. رابعاً: أن هذا لا ينطبق على أهل الجنة ، لأنهم سيتواصلون بالعربية. ومع ذلك ، فلا أحد منهم لديه حجة لصالح كلامهم ، لا من جهة العقل ولا من مصادر الشريعة ، ولكن هذه مجرد تصريحات خالية من أي دليل. والله تعالى أعلم! " انظر مجموع الفتاوى 4/299.

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

أمثلة

تتم كتابة الخوارزمية في اللغة الخوارزمية بشكل عام بالشكل:

algاسم الخوارزمية (الحجج والنتائج) منحشروط تطبيق الخوارزمية ضروريهدف الخوارزمية مبكروصف القيم الوسيطة | تسلسل الأوامر (هيئة الخوارزمية) يخدع

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

مثال لحساب مجموع المربعات:

algمجموع المربعات ( حج جميعن، يقطع جميعس) منح| ن> 0 ضروري| S = 1 * 1 + 2 * 2 + 3 * 3 + ... + n * n مبكر جميعأنا | مدخلن؛ S: = 0 | ncلأني من 1 إلى ن | | S: = S + i * i | عقدة | خاتمة"S =" ، S. يخدع

الورشة الإلكترونية

لتعزيز الدراسة النظرية للبرمجة بلغة خوارزمية ، في عام 1985 ، أنشأ متخصصون من Mekhmat في جامعة موسكو الحكومية محررًا ومترجمًا. "ورشة عمل إلكترونية"("E" - تكريما لـ Ershov) ، والذي يسمح لك بإدخال وتحرير وتنفيذ البرامج بلغة حسابية.

في عام 1986 ، تم إصدار مجموعة من عوالم التدريب (فناني الأداء) من أجل "الممارسة الإلكترونية": "الروبوت" ، "درافتر" ، "ذات الأرجل" ، "مركبة جميع التضاريس" ، والتي تتيح لك تقديم المفاهيم ببساطة من الخوارزمية. تم تنفيذ "الورشة الإلكترونية" على أجهزة الكمبيوتر: Yamaha و Corvette و UKNC وكانت تستخدم على نطاق واسع.

تم تحسين لغة البرمجة هذه باستمرار وظهر وصف لنسخة لاحقة من "ورشة العمل الإلكترونية" في كتاب مدرسي عام 1990. تم إطلاق نظام البرمجة "KuMir" ("مجموعة العوالم التعليمية") ، الذي يدعم هذا الكتاب المدرسي ، بواسطة مؤسسة InfoMir في عام 1990. لغة هذا النظام تسمى أيضا "KuMir".

في عام 1995 ، أوصت وزارة التعليم في الاتحاد الروسي بـ "KuMir" باعتباره المادة التعليمية الرئيسية لدورة "أساسيات المعلوماتية وهندسة الحاسبات" بناءً على الكتاب المدرسي لأ. .

نقد

ومع ذلك ، تجدر الإشارة إلى أن اللغة الخوارزمية ، في غياب التفاصيل التي تربطها مباشرة بهندسة الكمبيوتر ، ومع ذلك ، بالإشارة إلى لغات تشبه Algolo ، تعلم تلاميذ المدارس ضمنيًا الاعتماد على بنية فون نيومان للآلات. (تعتبر هندسة فون نيومان تطبيقًا عمليًا لفكرة سابقة تسمى Turing Machine. وهناك أفكار أخرى إلى جانب فكرة تورينج. وأشهرها يسمى Lambda Calculus: وقد عمل Alonzo Church عليها. Lisp Machine هي بنية تعتمد على Lambda - حساب التفاضل والتكامل.)

الروابط

  • A. P. Ershov. اللغة الخوارزمية في مقرر المدرسة لأساسيات المعلوماتية وتكنولوجيا الكمبيوتر. 05/07/1985
  • منتدى لغات البرمجة الروسية وأدوات التطوير

مؤسسة ويكيميديا. 2010.

تعرف على "اللغة الروسية الخوارزمية" في القواميس الأخرى:

    اللغة الخوارزمية هي لغة رسمية تستخدم لكتابة أو تنفيذ أو دراسة الخوارزميات. كل لغة برمجة هي لغة خوارزمية ، ولكن ليست كل لغة خوارزمية مناسبة للاستخدام كلغة ... ... ويكيبيديا

    هذا المصطلح له معاني أخرى ، انظر التنين (معاني). مثال على مخطط كتلة لخوارزمية في تنين لغة DRAKON لمخطط DRAKON (لغة خوارزمية روسية صديقة توفر الرؤية) مرئي ... ... ويكيبيديا

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

    اللغة الخوارزمية (أيضًا لغة الخوارزمية الروسية ، RAYA) هي لغة برمجة تستخدم لكتابة ودراسة الخوارزميات. عند دراسة علوم الكمبيوتر في المدارس ، لدراسة أساسيات الخوارزمية ، يسمى ب. خوارزمية المدرسة ...... ويكيبيديا

    لغة البرمجة التعليمية هي لغة برمجة مصممة لتعليم البرمجة للمتخصصين. يجب أن تلبي هذه اللغة المطلب الرئيسي: البساطة. كلما كان الأمر أبسط ، كلما كان المبتدئ يتقنه بشكل أسرع. احتمالات مثل ... ... ويكيبيديا

    مثال على مخطط كتلة لخوارزمية في مخططات التنين بلغة DRAKON إن DRAKON (لغة خوارزمية روسية صديقة توفر الرؤية) هي لغة خوارزمية مرئية تم إنشاؤها في إطار برنامج Buran الفضائي. تطوير هذه اللغة ... ويكيبيديا