CSL-CROOK - Instrukcje badania zbiorów

Z MERA 400 wiki
Wersja z dnia 14:30, 31 sie 2013 autorstwa Amo (dyskusja | edycje) (Utworzono nową stronę "Instrukcje badania zbiorów mogą być stosowane zarówno do zbiorów obu typów (uporządkowanego lub boolowskiego). Efektem badania jest stwierdzenie czy fakt o któ...")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Instrukcje badania zbiorów mogą być stosowane zarówno do zbiorów obu typów (uporządkowanego lub boolowskiego). Efektem badania jest stwierdzenie czy fakt o którym jest mowa w treści instrukcji, ma miejsce czy nie. Jeżeli fakt taki zachodzi, to wynikiem pierwszej części instrukcji jest prawda (TRUE), w przeciwnym przypadku (FALSE). Jeżeli stwierdzono prawdę (TRUE) to odbywa się skok do instrukcji oznaczonej etykietą, która występuje jako pierwsza w części adresowej instrukcji badania. W wyniku fałszu (FALSE) następuje skok do instrukcji oznaczonej etykietą, która występuje jako druga w części adresowej.

Postać adresowa:

E1 @
E1 @ E2
@ E2

Gdzie:

  • E1, E2 - etykiety instrukcji należących do tego samego segmentu programu.

Pierwsza i trzecia postać instrukcji adresowej są skróconymi postaciami instrukcji. Jeżeli opuszczona jest etykieta E1 (E2), to w wypadku wystąpienia TRUE (FALSE) następuje skok do kolejnej instrukcji w programie za instrukcją, która zawiera postać adresową.

Arytmetyczne instrukcje badające

Arytmetyczne instrukcje badające mają następującą ogólną postać:

w1 <operator relacji> w2 e1 @ e2

Gdzie:

  • w1, w2 - dowolny wyrażenie tego samego typu
  • e1, e2 - etykiety części adresowej.
  • Operatory relacji:
    • GT większy niż (>)
    • GE większy lub równy (>=)
    • EQ równy (=)
    • NE różny (^/=)
    • LE mniejszy lub równy (<=)
    • LT mniejszy (<)

Jeżeli wyspecyfikowana zależność sprawdza się dla bieżących wartości dwóch wyrażeń arytmetycznych wówczas wyrażenie badające jest prawdą i następuje skok do instrukcji z etykietą e1, w przeciwnym przypadku wyrażenie badające jest fałszem i następuje skok do instrukcji z etykietą e2.

Instrukcja IN

Postać instrukcji jest następująca:

O IN Z1 e1 @ e2

Gdzie:

  • O - obiekt
  • Z1 - zbiór
  • e1, e2 - etykiety części adresowej

Jeżeli obiekt <o> należy do zbioru Z1 to następuje skok do etykiety e1, w przeciwnym przypadku nastąpi skok do etykiety e2.

Instrukcja NOTIN

Postać instrukcji:

O NOTIN Z1 e1 @ e2

Jeżeli obiekt <o> nie jest elementem zbioru Z1 wówczas następuje skok do etykiety e1. Jeżeli obiekt <o> jest elementem zbioru Z2 wówczas następuje skok do etykiety e2.

Instrukcja EMPTY

Postać instrukcji:

Z1, Z2, Z3,... EMPTY e1 @ e2

Jeżeli zbiory Z1, Z2, Z3, ... nie zawierają żadnych elementów, to nastąpi skok do instrukcji o etykiecie e1. W przeciwnym wypadku nastąpi skok do instrukcji o etykiecie e2.

Instrukcja EQUALS

Postać instrukcji:

Z1 EQUALS Z2 e1 @ e2

Jeżeli zbiory Z1, Z2 są sobie równe w sensie Z1=Z2, to wynik badania jest TRUE. Jeżeli co najmniej jeden obiekt należy do zbioru Z1 i nie należy do zbioru Z2 lub odwrotnie to wynik badania jest FALSE. Nastąpi wtedy skok według omówionej wcześniej zasady.

Instrukcja WITHIN

Postać instrukcji:

Z1 WITHIN Z2 e1 @ e2

Jeżeli zbiór Z2 jest podzbiorem zbioru Z1 to wynik badania jest TRUE. Natomiast jeżeli choć jeden obiekt należy do zbioru Z2 i nie należy do Z1, to wynik badania jest FALSE. Żaden ze zbiorów, niezależnie od wyniku badania, nie ulegnie zmianie. Skok następuje według ogólnych zasad.

Źródło: Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2), Janusz Gocałek, Jacek Klauziński, Poznań, 1985