برمجة منظمة. اللغة الخوارزمية الروسية

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

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

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

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

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

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

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

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

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

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

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

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

دسب

وكانت النتيجة DSSP - نظام حوار للبرمجة المنظمة.

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

أساس DSSP هو معالج مكدس تمت محاكاته على أجهزة الكمبيوتر باستخدام أدوات تم تطويرها بعناية لإنشاء برامج منظمة (معالج DSSP).

كان النموذج الأولي لهذا المعالج هو الآلة الرقمية الثلاثية التجريبية "Setun 70" التي تم إنشاؤها في PNIL COMPUTER بجامعة موسكو الحكومية في أواخر الستينيات.

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

راية

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

أمثلة

F1 - يحسب 3*X*X-4*X+2
: F1 [X] ج 3 * 4 - * 2 + ؛

باستخدام F1
* 25 ف1. د في كيه 1777
* -9 ف1 . د في كيه 281

F2 - يحسب A2*X*X-A1*X+A0
: F2 C E4 E3 * + * + ;

باستخدام F2
* 1 2 3 4 ف2 . د في كيه 57
* 1 2 -3 4 ف2 . د في كيه -39

FG - مضروب N، إذا كان N> 0، وإلا 0
: FG [N] C BR+ FCT T0 ;
: FCT [N] C 1- C DO P D ;
: P E2 C2 * E2 1- ;

باستخدام إف جي
* -5 ف.ج . د في كيه 0
*5 ف.ج. د في كيه 120

GCD - القاسم المشترك الأكبر للأعداد الطبيعية M،N
: GCD RP CD D [GCD] ;
[قرص مضغوط - من الأرباح والمقسوم عليه إلى المقسوم عليه والباقي]
: CD [المقسوم عليه، المقسوم عليه] E2 C2 / [المقسوم عليه، القسمة، الباقي] E2 D [المقسوم عليه، الباقي] C EX0؛

باستخدام جي سي دي
* 48 72 جي سي دي. د في كيه 24
* 225,650 إيماءة. د في كيه 25

الحوار: سؤال - إجابات - ملخص
ب8
: إجابات أسئلة الحوار - ملخص؛
: سؤال CR "كيف تنوي استخدام DSSP؟
1. للحسابات
2. للتحكم
3. لمعالجة النصوص" ؛
: ملخص الإجابات RP AR ;
: AR CR." أعط رقم الإجابة - "TIB BR #1 R1 #2 R2 #3 R3 ELSE R4؛
: R1 CR "DSSP ليس موجهًا حسابيًا" EX؛
: R2 CR "أنت على الطريق الصحيح" EX ;
: R3 CR "DSSP سوف يساعدك!" السابق ؛
: R4 CR "لم يتم توفير مثل هذا الرد" ;
ب10

باستخدام الحوار
* الحوار
كيف تنوي استخدام DSSP؟
1. للحسابات
2. للتحكم
3. لمعالجة النصوص
أعط الجواب رقم - 7
لم يتم توفير هذه الإجابة
أعط الجواب رقم - 3
سوف يساعدك DSSP!

التنفيذ

  • أجهزة الكمبيوتر والمنصات: Intel 80x86, MC68020, R3000, VAX, PDP-11, INTEL 8080, SparcSUN.
  • أنظمة التشغيل: MSDOS، موسعات MSDOS، UNIX، RT-11، RSX، OS9، CPM

بدلا من الاستنتاج

لسوء الحظ، في الوقت الحالي، توقف تطوير اللغة رسميًا؛ ويعود تاريخ آخر الأخبار إلى عام 2002.

ومع ذلك، يمكن للجميع تجربة البرمجة المنظمة:

  1. git clone git://github.com/ingeniarus/DSSP-32.git
  2. اتبع التعليمات من التثبيت
لن يستغرق تجميع النظام سوى بضع دقائق... استمتع!

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

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

وروى الطبراني في الأوسط من كلام أبي هريرة :
«قال رسول الله صلى الله عليه وسلم: «أنا عربي، والقرآن عربي، ولغة منازل الجنة عربي».

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

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

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

وصف عام للغة الجنة

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

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

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

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

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

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

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

: P P1 P2 ... PN ;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

معالج دي اس بي

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

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

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

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

2 5 - 3 * .

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

* 2 5 - 3 * . -90

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

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

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

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

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

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

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

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

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

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

درجة حرارة الفار

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

درجة حرارة الفار 0! درجة حرارة

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

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

ن!=ن*(ن-1)*(ن-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 [ن]! ك ك ك 1- دو و . [ن] ؛

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

و [ر] ك 1- ! ك[R]ك*;

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

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

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

5 فكت 120

7 اتفاقية التجارة الحرة 5040

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

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

: فا ج E3 * E2 1- ;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

بناء جملة لغة رايا

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

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

أمثلة على الكلمات: CLEAR NOP STACK2 & 1+ -366 X Probe.

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

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

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

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

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

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

    التعليق: نص عشوائي بين قوسين مربعين ومفصول بفاصلات، على سبيل المثال: .

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

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

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

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

2) يتم تنفيذها بالتزامن مع كلمة واحدة أو أكثر من الكلمات اللاحقة، أي. كونها الكلمات الأولية (البادئات) لأوامر مكونة من كلمتين أو ثلاث أو عدة كلمات؛

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

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

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

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

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

0 X - تعيين القيمة 0 للمتغير X،

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

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

استخدم $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 / [int(a,b),res(a,b)] E2 D [res(a,b)] ;

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

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

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

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

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

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

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

العمليات التي يتم تنفيذها على المكدس

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

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

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

[عنوان البداية،N+1,1/0]

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

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

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

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

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

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

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

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

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

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

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

عند العمل باستخدام الرموز السداسية العشرية، قد تحدث تصادمات بين القيم الحرفية الرقمية وأسماء أوامر معالج DSSP. على سبيل المثال، يمكن تفسير الكلمة 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 *

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

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

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

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

عند البرمجة، يتعين عليك غالبًا زيادة قيمة القيمة أو تقليلها بمقدار 1 أو 2. وقد تم إدخال أوامر خاصة في لغة PARA تنفذ إجراءات محددة في الجزء العلوي من المكدس. يتم تحديدها بالكلمات: 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 إنف 722 & 136 &0 325 "+"

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

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

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

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

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

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

B8 125 SHR SHL -2 SHT

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

B10 -5 3 شت [-40]

يجب أن تؤخذ في الاعتبار إمكانية الفائض.

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

بينما

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

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

B16 0ABCD SWB SWB

0ABCDEF12 سوو سوب

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

هناك ثلاثة أوامر لحذف عناصر المكدس: D، DD، DS (Drop). يقوم الأمر D بإزالة عنصر واحد (أعلى) من المكدس، بينما يقوم DD بإزالة عنصرين، على سبيل المثال:

يقوم D DD D DS بإزالة كافة العناصر من المكدس (يمسح المكدس):

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

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

[س] ج 3 * 4 + * 5 -

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

C2 C4

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

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

ه3 ه2

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

5 بالتوقيت الشرقي

أمر 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

سيتم مناقشة ضوابط البرنامج اعتمادا على نتائج المقارنة لاحقا.

تحديد الإجراءات

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

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

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

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

بعد إدخال تعريف الإجراء والضغط على المفتاح يتم إعلام المعالج بانتهاء الإدخال، وتظهر علامة النجمة على شاشة الوحدة الطرفية، للإشارة إلى تنفيذ أمر "تحديد الإجراء" واستعداد المعالج لمواصلة الحوار. يمكنك الآن تطبيق إجراء 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 بكسا . د -39

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

:بكسا. د ؛

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

: الوقت [ر] 1- الوقت ;

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

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

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

البرنامج الذي هو عبارة عن سلسلة من الأوامر التي يتم تنفيذها بالترتيب الذي تظهر به واحدة تلو الأخرى في تدوينها يسمى خطيًا. لجعل البرنامج مرئيًا (قابل للقراءة) ومفهومًا بسهولة، يتم تقسيمه إلى أجزاء مسماة لها معنى معين - إجراءات، يتم تحديد كل منها من خلال تسلسل الإجراءات الخاص بها، والذي يتم تعريفه بدوره من خلال تسلسل إجراءات أصغر، وما إلى ذلك. للإجراءات التي يتم تحديدها مباشرة من خلال تسلسل أوامر 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 في DSSP كعملية أساسية للمعالج.

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

: لا [x] BR0 1 0 ;

غالبًا ما يتم تفرع البرنامج بعد أوامر المقارنة (<, =, >) ، مما ينتج قيمة منطقية 1 أو 0 اعتمادًا على نتيجة مقارنة رقمين. على سبيل المثال، يمكن برمجة أمر اللغة الأساسية 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، الخ. ما يصل إلى PN شاملة. إذا لم تسفر أي من المحاولات عن تطابق، فسيتم تنفيذ الإجراء P0 المسمى بعد الكلمة ELSE. عادة، تعمل الثوابت الرقمية كإجراءات مؤشر، على سبيل المثال:

[x] C BR 5 NEG -3 ABS 0 وليس آخر T0 [y]

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

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

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

: الوقت [ر] 1- C IF+ TIME؛

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

7 الوقت<ВК>

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

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

يرشدك أمر 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 دو ص

إذا كانت هناك عملية خروج واحدة على الأقل في نص الإجراء P وتم استيفاء شرط تنفيذها قبل حدوث العدد المحدد من التكرارات، فسيتم إنهاء التكرارات بالخروج من الإجراء بنفس الطريقة التي يتم بها في حالة عملية ار بي على سبيل المثال، عندما يكرر 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+ بسيط جدًا: تحتاج إلى إضافة واحد إلى الجزء العلوي من المكدس دون تغيير الجزء العلوي.

: ن + E2 1 + E2 ;

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

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

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

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

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

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

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

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

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

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

: إيماءة! X! Y RP الخطوة X [GCD] ;

: الخطوة X Y = EX+ X Y BR+ X-Y Y-X ;

: س-ص-ص-! س ;

: ذ-س-س-! ص؛

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

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

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

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

[ي] صف

باستخدام رقم العنصر الموجود على المكدس كمعلمة، يؤدي اسم متجه ROW إلى استبدال هذا الرقم بقيمة العنصر المقابل. إذا كانت الكلمة! مباشرة قبل اسم متجه ROW، فسيتم تعيين قيمة الرأس الفرعي لعنصر هذا المتجه المشار إليه بواسطة الرأس، ويتم تقليل عمق المكدس بمقدار 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 - تعريف ناقل البايت المكون من 6 مكونات X؛

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

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

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

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

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

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

بايت CNST Y #A #B #C ؛

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

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

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

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

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

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

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

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

15 5" بي في! تيرابايت

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

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

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

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

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

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

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

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

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

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

0 × يعادل 0! X

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

X يعادل X E2 - ! X

يؤدي استخدام هذه العمليات إلى زيادة كفاءة البرامج ورؤيتها.

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

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

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

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

3 4 2 طويل ARR Z

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

مقاس؟ الحجم X؟ المقاس Y؟ ز

خافت؟ X خافت؟ واي ديم؟ ز

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

" X [add.X] 3 @BI - البت الثالث من X، 0 " X 3 !BI - X هو 100101،

"X [add.X] 0 !BI0 - X هو 100100،

" X [add.X] 1 !BI1 - X هو 100110.

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

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

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

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

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

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 "النص" SRCHB

# "نص" SRCHB

#E "النص" [#E,a,4] 1- + -4 [#E,a+3,-4] SRCHB [-2]

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

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

إصلاح سرعة VAR 20 إصلاح بايت VCTR TABL

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

أوامر التحكم بالمعالج

تحتوي لغة PARA على مجموعة صغيرة من الأوامر المصممة للتحكم في معالج DSSP، أو بشكل أكثر دقة، محاكي معالج DSSP.

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

إصدار DSSP XX.XX.XX

متاح XXXXXXW

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

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

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

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

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

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

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

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

أوامر التحكم في القاموس

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

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

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

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

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

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

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

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

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

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

تشكل إجراءات DSSP الأساسية قاموسًا فرعيًا يسمى $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، يتم عرض أسماء الأقسام المراد حذفها.

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

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

:: : X+ Y !+ X ;

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

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

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

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

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

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

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

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

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

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

."<текст>"

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

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

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

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

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

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

يصدر أمر BELL إشارة صوتية قصيرة ("الجرس").

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

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

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

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

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

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

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

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

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

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

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

فخ S1 "الموقف S1."

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

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

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

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

: أ ... ON S "المقاطعة S" ... ؛

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

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

دعونا نلقي نظرة على الأمثلة. يقوم الإجراء M بإدخال الحروف من لوحة المفاتيح الطرفية والتحقق مما إذا كان رقمًا. إذا لم يكن الحرف الذي تم إدخاله رقمًا، فسيتم رفع مقاطعة ND. TRAP ND "ليس رقمًا." : م ار بي 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، مما سيؤدي إلى إصدار الرسالة على سطر جديد: خطأ. سيتم استبدال الحرف الذي تم إدخاله بالحرف 0، وبعد ذلك سيستمر M في العمل.

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

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

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