2A. Tétel: Lexikális egységek
Lexikális egységek.
A lexikális egységek a program szövegének azon elemei, melyeket a fordító a lexikális elemzés során felismer és tokenizál. Fajtái a következők: többkarakteres szimbólum, szimbolikus nevek, címke, megjegyzés, literálok.
Adattípusok.
Az adatabsztrakció első megjelenési formája az adattípus, ami egy absztrakt programozási eszköz, amely mindig más, konkrét programozási eszköz komponenseként jelenik meg. Az adattípusnak neve van, ami egy azonosító. A programozási nyelvek egy része ismeri, más része nem, eszerint típusos és nem típusos nyelvek. Egy adattípust három dolog határoz meg, a tartomány, a műveletek, reprezentáció.
Az adattípusok tartománya azokat az elemeket tartalmazza, amelyeket az adott típusú konkrét programozási eszköz fölvehet értékként. Ezen tartomány elemei jelenhetnek meg a programban literálként.
Az adattípushoz hozzátartoznak a műveletek, amelyeket a tartomány elemein végre tudunk hajtani. Minden adattípus mögött van egy megfelelő belső ábrázolási mód.
A reprezentáció az egyes típusok tartományába tartozó értékek tárban való megjelenését határozza meg, azt, hogy az elemek hány bájtra és milyen bitkombinációra képződnek le.
Nevesített konstans.
Egy nevesített konstansnak három komponense van (típus, név, érték). Muszáj mindig deklarálni. Egy nevesített konstans a neve álltal van reprezentálva a forráskódban. A név mindig egy érték komponenst takar. Az érték komponenst nem lehet változtatni futási időben, a deklarálásnál eldőlt az értéke. A nevesített konstans szerepe az, hogy engedjük a programozót, egy gyakran használt értéknek egy jól leíró nevet adni. Az előnye, hogy elegendő a deklarálásnál megváltoztatni az értékét, nem kell az összes előfordulásánál változtatni.
Változó.
A változó olyan azonosító, amely az információ ideiglenes tárolására szolgál. A program végrehajtásakor az adatokat változókban tároljuk. A változókban tárolt adatok a program futása közben változhatnak, módosulhatnak. Típusa lehet pl. string, integer, double.
Kifejezések.
Utasítások.
Az utasítások alkotják az eljárásorientált nyelveken megírt programok olyan egységeit, amelyekkel egyrészt az algoritmusok egyes lépéseit megadjuk, másrészt a fordítóprogram ezek segítségével generálja a tárgyprogramot. Két nagy csoportjuk van: a deklarációs és a végrehajtható utasítások. A deklarációs utasítások mögött nem áll tárgykód, teljes mértékben a fordítóprogramnak szólnak, attól kérnek valamilyen szolgáltatást, üzemmódot állítanak be, illetve a tárgykód generálásánál felhasznált információkat szolgáltatnak. Alapvetően befolyásolják a tárgykódot, de maguk nem kerülnek lefordításra. A programozó a névvel rendelkező saját programozási eszközeit tudja deklarálni. A végrehajtható utasításokból generálja a fordítóprogram a tárgykódot. Általában a magasszintű nyelvek végrehajtható utasításaiból több gépi kódú utasítás áll elő.
Csoportosításuk:
- Értékadó utasítás
- Üres utasítás
- Ugró utasítás
- Elágaztató utasítások
- Ciklusszervező utasítások
- Hívó utasítás
- Vezérlésátadó utasítások
- I/O utasítások
- Egyéb utasítások.
Programegységek.
Paraméterkiértékelés, paraméterátadás.
Paraméterkiértékelés
Paraméterkiértékelés alatt értjük azt a folyamatot, amikor egy alprogram hívásánál egymáshoz rendelődnek a formális- és aktuális paraméterek, és meghatározódnak azok az információk, amelyek a paraméterátadásnál a kommunikációt szolgáltatják. A paraméterkiértékelésnél mindig a formális paraméter lista az elsődleges, ezt az alprogram specifikációja tartalmazza, egy darab van belőle. Aktuális paraméter lista viszont annyi lehet, ahányszor meghívjuk az alprogramot, ezeket rendeljük a formális paraméterlistához.
Paraméterátadás
A paraméterátadás az alprogramok és más programegységek közötti kommunikáció egy formája. A paraméterátadásnál mindig van egy hívó, ez tetszőleges programegység és egy hívott, amelyik mindig alprogram. Kérdés, hogy melyik irányban és milyen információ mozog.
Érték szerinti paraméterátadásnál a formális paramétereknek van címkomponensük a hívott alprogram területén. Az aktuális paraméternek rendelkeznie kell értékkomponenssel a hívó oldalon. Ez az érték meghatározódik a paraméterkiértékelés folyamán, majd átkerül a hívott alprogram területén lefoglalt címkomponensre. A formális paraméter kap egy kezdőértéket, és az alprogram ezzel az értékkel dolgozik a saját területén. Az információáramlás egyirányú, a hívótól a hívott felé irányul. A hívott alprogram semmit sem tud a hívóról, a saját területén dolgozik. Mindig van egy értékmásolás, és ez az érték tetszőleges bonyolultságú lehet.
Cím szerinti paraméterátadásnál a formális paramétereknek nincs címkomponensük a hívott alprogram területén. Az aktuális paraméternek viszont rendelkeznie kell címkomponenssel a hívó területén. Paraméterkiértékeléskor meghatározódik az aktuális paraméter címe és átadódik a hívott alprogramnak, ez lesz a formális paraméter címkomponense. Tehát a meghívott alprogram a hívó területén dolgozik. Az információátadás kétirányú, az alprogram a hívó területéről átvehet értéket, és írhat is oda, átnyúl a hívó területre. Időben gyors, mert nincs értékmásolás, de veszélyes lehet, mert a hívott hozzáfér a hívó területén lévő információkhoz.
Eredmény szerinti paraméterátadásnál a formális paraméternek van címkomponense a hívott alprogram területén, az aktuális paraméternek pedig lennie kell címkomponensének. Paraméterkiértékeléskor meghatározódik az aktuális paraméter címe és átadódik a hívott alprogramnak, azonban az alprogram a saját területén dolgozik, és csak működésének befejeztekor másolja át a formális paraméter értékét erre a címre. A kommunikáció egyirányú, a hívottól a hívó felé irányul. Van értékmásolás.
Érték-eredmény szerinti paraméterátadásnál a formális paraméternek vancímkomponense a hívott területén és az aktuális paraméternek rendelkeznie kell érték- éscímkomponenssel. A paraméterkiértékelésnél meghatározódik az aktuális paraméter értéke éscíme és mindkettő átkerül a hívotthoz. Az alprogram a kapott értékkel, mint kezdőértékkelkezd el dolgozni a saját területén és a címet nem használja. Miután viszont befejeződik, normális paraméter értéke átmásolódik az aktuális paraméter címére. A kommunikáció kétirányú, kétszer van értékmásolás.
Blokk.
Olyan programegység, amely csak másik programegység belsejébe helyezkedhet el, külső szinten nem állhat. Formálisan van kezdete, törzse és vége. A kezdetet és a véget egy-egy speciális karaktersorozat vagy alapszó jelzi. A törzsben lehetnek deklarációs és végrehajtható utasítások, nyelvtől függően tetszőlegesen keverten vagy külön deklarációs és végrehajtható részekben. Nincs paramétere, egyes nyelvekben lehet neve. Ez általában a kezdet előtt álló címke. Bárhol elhelyezhető, ahol végrehajtható utasítás állhat.
Hatáskörkezelés, láthatóság.
A hatáskör a nevekhez kapcsolódó fogalom. Egy név hatásköre alatt értjük a program szövegének azon részét, ahol az adott név ugyanazt a programozási eszközt hivatkozza, tehát jelentése, felhasználási módja, jellemzői azonosak.
A statikus hatáskörkezelés fordítási időben történik, a fordítóprogram végzi. Alapja a programszöveg programegység szerkezete. Ha a fordító egy programegységben talál egy szabad nevet, akkor kilép a tartalmazó programegységbe, és megnézi, hogy a név ott lokális- e. Ha igen vége a folyamatnak, ha nem, akkor tovább lépked kifelé, amíg meg nem találja lokális névként, vagy el nem jut a legkülső szintre. Ha kiért a legkülső szintre, akkor vagy a mivel a programozónak kellett volna deklarálnia a nevet, ez fordítási hiba, vagy mivel ismeri az automatikus deklarációt a nyelv, a fordító hozzárendeli a névhez az attribútumokat. A név ilyenkor a legkülső szint lokális neveként értelmeződik.
A dinamikus hatáskörkezelés futási idejű tevékenység, a futtató rendszer végzi. Alapja a hívási lánc. Ha a futtató rendszer egy programegységben talál egy szabad nevet, akkor a hívási láncon keresztül kezd el visszalépkedni mindaddig, amíg meg nem találja lokális névként, vagy a hívási lánc elejére nem ér. Ez utóbbi esetben vagy futási hiba keletkezik, vagy automatikus deklaráció következik be. Dinamikus hatáskörkezelésnél egy név hatásköre az a programegység, amelyben deklaráltuk, és minden olyan programegység, amely ezen programegységből induló hívási láncban helyezkedik el, hacsak ott nem deklaráltuk újra a nevet.
Absztrakt adattípus.
Az adattipus az értékek halmazából, és a műveletekből áll. Attól absztrakt, hogy nem ismerjük az adatokat tároló adatszerkezetet, sem pedig a műveletek algoritmusát, csak a specifikációjuk definiált. Absztrakt adattipus pl: Verem, Sor, Lista.
Kivételkezelés.
A java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.