Az SR programozási nyelv

Vezérlési szerkezetek

Üres utasítás

Azaz üres program. Módszertanból megtanultuk, hogy egy skip programnak semmilyen hatása nincs, és lefutása azonnali. (Mondhatnánk úgy is, hogy amint elindul, már be is fejeződött.) Az SR-ben különösebb jelentősége nincs, hogy használjuk-e vagy sem. Fordításnál nem tartozik hozzá kód.

Alakja:

skip

Stop utasítás

A stop utasítással lehetőségünk van a teljes program futásának felfüggesztésére, befejezésére.

Két formája létezik:

stop stop(expr)

A második esetben a megadott kifejezés eredménye lesz a kilépési állapot (exit status). Míg első esetben ez az érték 0. Fontos, hogy ha az exit status nem nulla, akkor a fő erőforrás (main resource) final blokkja nem fog lefutni!

Elágazás

A feltételes elágazásokat az if kulcsszó vezeti be, és a fi zárja le. Az if kulcsszó után egy logikai feltételt kell megadnunk, amelynek igazságértékétől függően fut le a hozzá rendelt utasítássorozat. Lehetőségünk van else ill. else-if ágak beiktatására is. (A hagyományos programnyelvektől egy kicsit eltérő szintaxissal.)

if condition1 -> statements_1 [] condition2 -> statements_2 [] condition3 -> statements_3 ... [] else -> statements_n fi

A [] -jelekkel bevezetett sorok nem kötelezőek. A [] utáni feltétel megadásával készíthetünk else-if ágakat. Ezek meg kell, hogy előzzék az else ágat. Az else-if ágak feltételeinek kiértékelése felülről lefelé történik. Az első igaz ág törzse fog lefutni. Ha mind hamis, akkor meglevő else ág esetén annak törzsére, míg else ág hiányában a fi utáni utasításra adódik át a vezérlés.

Ciklus

While ciklus

Előltesztelős ciklus. Ez egy érdekes része az SR-nek. Egyfelől használható úgy, mint minden más nyelvben, azaz a ciklus törzsét addig ismételjük, amíg a ciklusfeltétel hamissá nem válik.

do condition -> statements od

Látható, hogy a do kulcsszó vezeti be, és az od kulcsszó zárja le a ciklust. A do után adjuk meg a ciklusfeltételt, amit egy - az elágazásoknál is látott - "->" jel követ.
Másik lehetőség: a többágú ciklus. Ekkor az elágazásokhoz hasonlóan több, feltételhez kötött ágat adunk meg. Minden iterációban a legfelső igaz feltétellel rendelkező ág fut le. Ha nincs ilyen, akkor kilépünk a ciklusból.

do condition1 -> statements_1 [] condition2 -> statements_2 [] condition3 -> statements_3 ... [] conditionN -> statements_n od

For ciklus

Számlálós ciklus. Akár több dimenziós bejárásokat is definiálhatunk egyetlen egy számlálós ciklussal. Erre mindjárt mutatunk néhány példát, de előtte vizsgáljuk meg a szintaxisát, lehetőségeit.

Általánosan:

fa <quantifier> {,<quantifier>) -> statements fa ,ahol <quantifier> ::= idx_var_i := lower_i to upper_i [by step]

Az idx_var_i -k lesznek a ciklusváltozók, melyek csak a ciklus törzsén belül érhetők el. FONTOS, hogy ne használjunk előre deklarált változót cilusváltozónak! Az indexváltozó a lower_i és az upper_i közötti tarományt futja be, step-ben megadott lépésszámmal. A to helyett írható downto is, de ekkor a lower_i>=upper_i kell legyen!

Nézzünk példákat:

#Kiíratjuk a-z -ig a betűket fa i := 'a' to 'z' -> write(i) fa #(i,j) párokat íratunk ki: (1 0) (2 1) (2 0) (3 2) (3 1) (3 0) fa i := 1 to 3, j := i-1 downto 0 -> write(i,j) fa