A Specification and Descripiton Language programozási nyelv (SDL)

Utasítások, vezérlési szerkezetek

Az SDL-ben a különböző vezérlési szerkezetek és utasítások a szintaxison felül a különböző grafikus megjelenés segítségével is könnyedén azonosíthatók, ezzel is átláthatóbbá téve a kódot.

Task

A taskok a legegyszerűbb vezérlési szerkezetek, általában egyszerű értékadásokra szolgálnak. Egy speciális /*#CODE*/ kulcsszóval lehetőség van inline C kódot írni beléjük, ami egy az egyben bekerül a generált kódba. Az SDL-es szimbólumuk egy egyszerű téglalap.

Elágazás

Az SDL-ben speciális tulajdonságai vannak az elágazásnak. Talán a legszembetűnőbb, hogy a hagyományos programnyelvekkel ellentétben tetszőleges típus szerepelhet a feltételben, hiszen nem boolean-ként van kiértékelve, hanem illesztődik az elágazás ágaihoz. Ez utóbbiakból tetszőleges számú lehet, és akár értéktartományokat is megadhatunk címkeként.

Természetesen létezik ELSE kulcsszó, amivel a maradék lehetőséget tudjuk lefedni. A nyelv nem követeli meg, hogy a teljes állapotteret lefedjék az elágazás ágai, azonban átfedés nem lehet a különböző ágak között.

A szimbóluma egy rombusz, benne a feltétellel, a lehetséges ágakat pedig vonalak jelzik, rajtuk a címkékkel.

Ciklus

A nyelv nem tartalmaz explicit ciklust, nincs külön ilyen vezérlési szerkezet. Azonban elágazással, valamint az abból induló ág visszakötésével könnyedén szimulálható. Így gyakorlatilag ciklus helyett elágazás és egyfajta goto fejezi ki a hagyományos ciklusokat.

Feltétel nélküli vezérlésátadás

Mivel az SDL-kód folyamatábraszerű, gyakorlatilag minden elemet összekötő vonal egy goto-nak fogható fel, tetszőleges sorrendben összeköthetjük a különböző kódrészleteket és azok ezen összekötés mentén fognak lefutni.

Ezen felül megtalálható a klasszikus goto is connector-ok formájában, melyek szerepe inkább a könnyebb tagolhatóság és a kódismétlések elkerülése. Jelük egy kis kör. Egy goto két körből áll, egy out-connector-ból, amiben az adott kódrészlet végződik, és egy in-connector-ból, ahova a vezérlés ugrik. A connector-ok azonosítása nevük alapján történik.

Minden out-connector-hoz kell tartoznia pontosan egy in-connector-nak, azonban semmilyen megkötés nincs az ellenkező irányban: létezhet in-connector megfelelő out-connector nélkül is, de számos azonos out-connector-ral együtt is.

Függvényhívás

A függvényhívás szimbóluma egy téglalap, melynek függőleges oldali duplázottak. Alternatív módon lehetőség van függvényhívásra a CALL paranccsal is. Ennek segítségével mind task-ból, mind elágazásból meghívhatjuk az adott függvényt, és használhatjuk visszatérési értékét.

Mindkét esetben a függvényhívás a hagyományos programozási nyelvekhez hasonlóan működik, azaz a vezérlés a függvényben folytatódik, és csak annak befejeztével tér vissza.

Processz indítás

Egy processzből tetszőlegesen indíthatunk másik processzt is, melynek szimbóluma egy alul és felül kettőzött oldalú téglalap. A függvényhívástól eltérően itt a vezérlés tovább fut, és az új processz (ál)párhuzamosan fut a szülő processzével.

Processz/eljárás megszűnése

Tetszőleges helyen és mennyiségben explicit szüntethetjük meg mind processzeinket mind eljárásainkat. Ekkor felszabadul a lefoglalt memória és processz esetén megszűnik az állapotgép, függvény esetén pedig visszaadódik a vezérlés a hívó félnek.

A megszűnés jele processz esetén egy X, eljárás esetén egy körben lévő X. Ez utóbbi esetben a megszűnésnek paramétert adhatunk, ez lesz az eljárás visszatérési értéke. Ezen érték típusának meg kell egyeznie az eljárás fejlécében definiált típussal.