Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 3. előadás Programozási nyelv felépítése szabályok megadása Lexika Milyen egységek építik fel? Szintaktikus szabályok Szemantikus szabályok Hogyan kell felépíteni? Értelmes-e amit csinálok? Lexika Formális nyelvek és automatákból tanult hármas típusú nyelvtan jellemző rá. ( ) Szintaktikus szabályok Formális nyelvek és automatákból tanult környezetfüggetlen nyelvtan jellemző rá. ( ) Szemantikus szabályok Formális nyelvek és automatákból tanult környezetfüggő nyelvtan jellemző rá. ( ) lexer parser lexikális egységekre bontja a forrás kódot. Tokeneket csinál. tokenekből struktúrát készít. Általában szintaxisfa segítségével írja le Program szemantikája (jelentése) szemantikai szabályok statikus fordítási időben ellenörzés Például: Változó, amit használunk deklarált-e? dinamikus futási időben ellenörzés Például: tömbök indexelésének helyessége
A Halting probléma alapján probálja szétválasztani a szemantikai szabályokat, hogy fordítási vagy futási időben történjen az ellenörzés. (http://en.wikipedia.org/wiki/halting_problem) Lexikális és szintaktikus szabályok Csellengő else probléma. Elsősorban C típusú nyelvekben fordulhat elő: if (a>0) if(b>0) c = 1; else c = 0; Ebben az esetben bármennyire is helyesnek látjuk a fentebbi leírást nem az, mivel az else mindig a hozzá legközelebb levő if-hez tapad. Így nem lesz külső else-ág. Nem azt fogja csinálni a program amit szerettünk volna, hogy csináljon. Ada-ban nincs ilyen probléma, mivel minden if-et end if-fel kell lezárnunk. Ellentétben ugye C++-al, ahol megtehetjük azt is, hogy ha egy utasítást szeretnénk adni az adott if ágban nem tesszük { }-et. Így előfordulhat ez a hiba is Vegyük az alábbi Java-s for ciklust: for (byte b = -128; b<=127; ++b) (byte -128-tól 127,ig tartalmaz értékeket) Ez például egy végtelen ciklus, mert +127-re is lefutott. Struktúrálatlan utasítások loop. exit; (vagy exit when (feltétel); ) end loop; Ha ilyet, használunk sokan csúnyának fogják találni, de van olyan kivételes eset, amikor elegáns és szép megoldás lehet. Például előreolvasás. (Goto-ra is volt egy példa. Ez megtalálható szintén az előadás diában. Mivel a félév során gyakorlatokon nem használjuk, így nem teszek ide minta kódot )
Karbantartás vs. optimalizáció Általában, amely program jobban karbantartható az kevésbé optimalizált, de ez így van fordítva is. Inkább legyen karbantartható egy kód, mint optimalizált. (Ez a tendencia nagy programok esetén) Interpreter és fordító program Az interpreter egy utasítás lefordítása után azonnal végrehajtja azt A fordítóprogram átalakítja a programot egy vele ekvivalens formára a számítógép által közvetlenül végrehajtható forma egy másik programozási nyelv Fordítás Szerkesztés
Csomag programegység Egy specifikációs részből és egy törzsből áll. Ezek elkülönülnek egymástól. 2 fordítási egységet tesznek ki. Program egység Beágyazva Könyvtári egységként Külön fordítható Fordítási egység 1 2 Alprogram Csomag Specifikációs részbe csak specifikációkat lehet beágyazni! Alprogramok deklarációja Alprogramok definíciója (http://pnyf.inf.elte.hu/kto/teaching/ada/pnydef.html) Alprogramok Eljárás Az állapottér egy alterét odaadjuk. Hagyjuk, hogy tegye amit kell. Mellékhatásokat itt se szeretjük nagyon, de a megadott paraméterekkel játszhadozhat. input (in),output (out), információáramlás (in out) paramétereket kaphat Függvény Csak input paramétereket kap 1 paramétert visszaad Nem szeretjük a mellékhatásokat csak input (in) paramétereket kaphat
Aktuális és formális paraméterek Alprogramok hívásakor a formális paramétereknek aktuális paramétereket feleltetünk meg. Végezetül: in,out, in out (paraméterek módja)