FORDÍTÓPROGRAMOK. I. Előadás. Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002.

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "FORDÍTÓPROGRAMOK. I. Előadás. Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002."

Átírás

1 FORDÍTÓPROGRAMOK I. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002.

2 Ajánlott irodalom: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman Compilers (Principles, Techniques, Rules) Addison Wesley,

3 Fordítóprogram Forrásnyelv SOURCE LANGUAGE FORDÍTÓ Célnyelv TARGET LANGUAGE A fordító Hibaüzenet ERROR MESSAGE egy forrásnyelvről egy célnyelvre fordít közölve az esetleges hibákat Az informatikában gyakran programozási nyelvekre gondolunk Forrásnyelvű program ( pl.: C ) Cél nyelvű program ( pl.: assembly, gépikód ) 3

4 Azonban tetszőleges program be és kimenete is valamely nyelven meghatározott BEMENET PROGRAM KIMENET Egy program bemeneteit jól, lehetőleg formálisan definiálni kell. Egy program kimenetének értelmezhetőnek kell lennie egy másik program, vagy egy felhasználó számára. A program műveleteket adatokon végez A bemenetek és az adatszerkezetek, illetve az adatszerkezetek és a kimenet közti leképezést a fordító végzi. Tehát bárkinek, akinek nem csak egy modult, hanem teljes szoftvert kell készítenie, annak tudnia kell: a be- és kimenetet formálisan definiálni és a definiált nyelvhez fordítóprogramot készíteni. 4

5 A tárgy célja megmutatni: hogyan lehet nyelveket definiálni, hogyan lehet nyelveket algoritmikusan értelmezni, mely nyelveket lehet könnyen értelmezni. Példa: Egy matematikai megoldó bemenete: Aritmetikai kifejezés: 2+1*6 Szöveges feladat: A csiga egy métert tesz meg óránkén egy függőleges falon felfelé. Két méterről indulva, milyen magasan lesz hat óra múlva? Megjegyzés: A nyelvek lehetnek: Szövegesek (Pl.: XML) Grafikusak (Pl.: UML) Ebben a félévben szöveges nyelvekkel foglalkozunk, de a grafikus nyelveknek is van szöveges megfelelője. (Pl.: UML tárolása XML nyelven) 5

6 Fordítóprogram felépítése FORRÁSNYELV 1. LEXIKAI ELEMZO 2. SZINTAKTIKAI ELEMZO SZIMÓLUMTÁBLA KEZELO 3. SZEMANTIKAI ELEMZO 4. KÖZBÜLSO KÓD GENERÁLÓ HIBAKEZELO 5. KÓD OPTIMALIZÁLÓ 6. KÓD GENERÁLÓ CÉLNYELV Megjegyzés: Az 1-4 lépéseket vizsgáljuk szoftverfejlesztésben betöltött kiemelt szerepe alapján. 6

7 1. Lexikai Elemzés A forrásnyelvű szöveget elejétől a végéig karakterenként beolvassuk, és olyan szakaszokra bontjuk (ún.: tokenekre), melyekben szereplő karaktereknek együtt van értelme. Példa: position := initial + rate * 60 Tokenekre bontva: 1. position azonosító 2. := értékadás szimbólum 3. initial azonosító 4. + összeadás jel 5. rate azonosító 6. * szorzás jel szám Megjegyzés: Lexikai elemzés során, a tokenek közötti elválasztó karaktereket elhagyjuk. Természetes nyelvi analógia: a szöveget szavakra bontjuk. 7

8 2. Szintaktikai Elemzés Más néven hierarchikus elemzésnek vagy (parsing) parzolásnak nevezzük. Tokeneket szervez hierarchiába nyelvtani szabályok alapján. Példa: 1. Minden azonosító egy kifejezés 2. Minden szám is egy kifejezés 3. Ha exp1 és exp2 kifejezések, akkor exp1*exp2 is kifejezés 4. Ha id azonosító és exp egy kifejezés, akkor id := exp egy utasítás A szintaktikai elemzés eredménye a tokenek kapcsolatát leíró fa: szintaxis fa 8

9 Szintaxis fa: Utasítás ÁLLÍTÁS Azonosító := Kifejezés position Kifejezés + Kifejezés Azonosító Kifejezés * Kifejezés initial Azonosító Szám rate 60 Természetes nyelvi analógia: a nyelvtani mondatrészek 9

10 3. Szemantikai Elemzés Ellenőrzi, hogy a formailag helyes szövegrészeknek van e értelme. Tipikus feladat a típusegyeztetés 4. Közbülső kód generálás Olyan reprezentációját képezi a nyelvnek, amely könnyen felépíthető és belőle a kimenet könnyen generálható. Példa: egy dinamikusan tárolt fa := Id 1 + Id 2 * Id 3 NULL 60 Az 5. és 6. lépéseket nem tárgyaljuk 10

11 Szimbólumtábla kezelő Egy szöveg tartalmazhat azonosítókat Például: egy azonosító hivatkozhat: konstansra változóra függvényre Egy fordító alapvető feladata, hogy rögzítse a szövegben lévő azonosítókat, a hozzájuk tartozó adatokkal együtt. Például: mi egy azonosító: neve típusa érvényessége (a szövegen belül) hivatkozott információ helye a memóriában 11

12 Megjegyzés Ezen adatokat a szimbólumtábla tárolja A szemantikai elemzés során a szimbólumtáblából olvassuk az azonosítók típusát. Id Név position initial rate Típus Hibakezelő A fordítás minden lépése okozhat hibákat Olyan fordító, amely megáll az első hibánál, kevésbé hasznos (minél több hibát írjon ki) 12

13 FORDÍTÓPROGRAMOK II. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

14 Egyszerű egy lépésben fordító Bevezető gondolatok Egy nyelvet az határoz meg, hogy: hogyan néz ki : szintaxis mi a jelentése : szemantikája A szintaxis meghatározásához bevezetjük a széles körben használt környezetfüggetlen nyelvtanokat. Egy nyelv jelentésének meghatározásához nem formalizált információkat is használnunk kell. Például: nekünk kell eldöntenünk, hogy két szöveg ugyanazt jelenti-e. A környezetfüggetlen nyelvtanok segítenek a nyelv értelmezésében is. A nyelvtanorientált fordítási technikát szintaxis vezérelt ( syntax directed) fordításnak nevezzük. 14

15 Példaként felépítünk egy fordítót, ami infix formáról postfix formába alakít. infix: operátorok az operanduszok között Pl.: postfix: operátorok az operanduszok után Pl.: Postfix kiértékelés berakjuk a verembe az operanduszokat ha egy operátor következik, akkor kivesszük a veremből az operanduszait, elvégezzük a műveletet és visszatesszük a verembe az eredményt. ha a postfix formában írt kifejezés végére értünk, akkor a veremben a végeredmény található. Pl.:

16 Első lépésként olyan fordítót építünk, mely + és - jelekkel elválasztott számjegyekből álló kifejezést fordít, majd ezt bővítjük tovább. Szintaxis vezérelt fordítás esetén a szintaktikai, szemantikai elemzés és a közbülső kód generálás egy lépésben történik. KARAKTER SOROZAT LEXIKAI ELEMZŐ TOKENEK SOROZAT SZINTAXIS VEZÉRELT ÉRTELMEZÉS KÖZBÜLSŐ REPREZENTÁCIÓ 16

17 Szintaxis meghatározása A környezetfüggetlen nyelvtan elemei: 1. A tokeneket tekintjük terminális szimbólumoknak (halmaz) 2. Nemterminális szimbólumok (halmaz) 3. Levezetési szabályaink (halmaz) Egy szabály: nemterminális terminálisok és nemterminálisok sorozata 4. Kiindulási szimbólum (ahonnan elkezdjük a levezetést) Példa: + és jelekből, illetve számjegyekből álló kifejezés: mint , 3-1, 7 1) List List + digit 2) List List digit 3) List digit 4) digit

18 Ha szabályokkal definiálunk egy nyelvtant, akkor a kezdő vagy kiindulási szimbólumra vonatkozó szabályokat írjuk le először. (Az előző példában List a kezdő szimbólum) A tokenek sorozata (string) nulla, vagy több tokent tartalmaz. Ha nullát, akkor üres sorozatnak nevezzük és e -vel jelöljük. Egy nyelvtanból tokenek sorozatához juthatunk: kezdőszimbólumból indulva a nemterminalisokat helyettesítve a nekik megfelelő szabályok jobb oldalain álló sorozatokkal míg csak terminálisokból, tehát tokenekből álló sorozathoz nem jutunk. 18

19 Példa a) A 3-mas szabály alapján 9 egy lista (list) mivel számjegy (digit) b) A 2-es szabály alapján 9 5 egy lista (list), mivel 9 egy lista és 5 egy számjegy c) Az 1-es szabály alapján egy lista, mivel 9 5 egy lista és 2 egy számjegy Ezt a levezetést a következő fa szemlélteti, melynek minden csúcspontjában a nyelv egy szimbóluma szerepel. Az ilyen fát, levezetési fának (parse tree) nevezzük. list list - digit list list + digit list list digit list digit list digit digit 9 list digit digit digit 2 19

20 Levezetési fák Egy adott kornyezetfuggetlen nyelvtan eseten a levezetesi fakra a kovetkezo tulajdonsagok teljesulnek: 1. A gyökér címkéje a kiindulási szimbólum 2. Egy levél címkéje egy token, vagy e 3. Közbülső csúcs címkéje egy nemterminális 4. Ha A egy közbülső csúcs címkéje, aminek n gyermeke van és X 1, X n a gyermekeinek cimkje: A X 1 X 2 X n egy levezetési szabály A e esetén az A címkéjű csúcsnak csak egy gyereke van Ha a leveleket balról jobbra összeolvassuk, megkapjuk a levezetett szót. Az az eljárás, mely során egy token sorozathoz meghatározzuk a levezetési fát az az elemzés vagy parzolás (parsing). 20

21 Egyértelműség Ha egy nyelvtan olyan, hogy valamely sorozat többféleképpen is levezethető, akkor a nyelvtan nem egyértelmű. Más szavakkal, egy nyelvtan nem egyértelmű, ha van olyan sorozat, melynek több levezetési fája is van. Példa: S S + S S S S S S S S S S S S S

22 Nyelvtanok egyértelművé télele: Asszociativitás (9-5) + 2 ugyanaz-e mint 9 - (5 + 2) vagy ? Mi a kiértékelés sorrendje? Ilyenkor kell plusz információ, amit beviszünk a nyelvtanba. Hagyományosan a + és a - műveletek illetve a * és / műveleteket balról jobbra végezzük, tehát bal asszociatívnak nevezzük őket, így a azonos a (9-5) + 2 vel. Hagyományosan a programozási nyelvekben az értékadást jobbról balra hajtjuk végre, tehát jobb asszociatív. a = b = c azonos a = (b = c) Példa: left digit left + digit left digit right letter letter = right left right left letter = right left - digit + digit a letter = right digit b letter c 22

23 Nyelvtanok egyértelművé télele: Operátorok kiértékelési sorrendje (precedencia) * 2 lehetséges kiértékelési sorrendjei: (9 + 5) * 2 illetve 9 + (5 * 2) Mivel mind a + és mind a * balasszociatív, ez a kérdés a külön-külön kiértékelési sorrendjük alapján nem oldható fel. Több operátor esetén a relatív precedenciákat is meg kell határozni. A különböző precedencia szintekhez külön nemterminálisokat vezetünk be. Példa: expr expr + term expr term term term term * factor term / factor factor factor digit (expr) 23

24 Szintaxis vezérelt fordítás Példa: infix postfix átalakítás Egy E infix kifejezés postfix formára hozása Ha E egy változó vagy konstans, E postfix formája önmaga. Ha E egy E 1 op E 2 alakú kifejezés, ahol op egy tetszőleges operátor, akkor E postfix alakja E 1 E 2 op ahol E 1 és E 2 rendre E 1 és E 2 postfix alakja. Ha E egy (E 1 ) alakú kifejezés, akkor E postfix alakja E 1 postfix alakja. (tehát nincs szükség zárójelezésre) Példa: (9 5) + 2 postfix alakja (5 + 2) postfix alakja

25 Szintaxis vezérelt fordításhoz szintaxis vezérelt definíciókat használunk. Szintaxis vezérelt definíció esetén A bemenet szintaktikai szerkezetét egy környezetfüggetlen nyelvtan határozza meg. A szimbólumokhoz attribútumokat vagy tulajdonságokat rendelünk. A levezetési szabályokhoz szemantikai szabályokat rendelünk, amelyek megadják egy nyelvtani szabályban szereplő nemterminális szimbólumok attribútumának számítási módját. Szintetizált attribútumról beszélünk, ha értékét a kiértékelési fában hozzá tartozó csúcs gyermekeinek attribútumából számítjuk. 25

26 Példa: infix postfix átalakítás levezetési szabályok szemantikai szabályok konkatenáció expr expr 1 + term expr.t := expr 1.t term.t + expr expr 1 term expr.t := expr 1.t term.t -. attribútum. expr term expr.t := term.t term 0 term.t := 0 term 1 term.t := term 9 term.t := 9 26

27 Szintetizált attribútumok kiszámítása levezetési fa alapján: expr.t := ez a kimenet expr.t := 95- term.t := 2' expr.t := 9 term.t := 5' term.t := Végeredményül a győkér szintetizált attribútumában megkapjuk a postfix formát. 27

28 FORDÍTÓPROGRAMOK III. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

29 Szintetizált attribútumok kiértékelése A levezetési fa minden olyan bejárása célravezető, ahol egy csúcs gyermekeit előbb értékeljük ki mint magát a csúcsot. Ennek egy könnyen megvalósítható módja a mélységi bejárás rekurzív eljárással, preorder bejárási sorrendben. procedure visit (n : node) begin for each child m of n, from left to right do visit ( m ); evaluate semantic rules at node n end end 29

30 Fordítási sémák A továbbiakban eljárásszerűen adjuk meg a fordítás módját. A fordítási séma egy olyan környezetfüggetlen nyelvtan, ahol a szabályok jobb oldalába programrészleteket, úgynevezett szemantikai akciókat (semantic action) ágyazunk. A fordítási séma abban különbözik a szintaxis vezérelt definíciótól, hogy a szemantikai szabályok kiértékelési sorrendje egyértelműen meghatározott. 30

31 A szemantikai akciókat a szabályon belül kapcsos zárójelbe tesszük. Pl.: expr expr + term { print( + ) } expr expr term { print( - ) } expr term term 0 { print( 0 ) } term 1 { print( 1 ) } term 9 { print( 9 ) } A szintaxis vezérelt definíció alkalmazásával ellentétben nincs mindig szükség átmeneti tárolásra. 31

32 Ha egy szabályban szemantikai akció szerepel, akkor a levezetési fában a szabály bal oldalán szereplő csúcshoz egy plusz gyermeket veszünk fel, szaggatott vonallal csatolva és a szemantikai akcióval címkézve. Pl.: expr expr term print ( + ) expr - term print ( - ) term 9 print ( 9 ) 5 print ( 5 ) 2 print ( 2 ) A bejárási sorrend kötött. 32

33 Levezetés (parzolás) Azt az eljárást, amely során megadjuk, hogy egy kifejezés (tokenek sorozata) hogyan vezethető le nyelvtani szabályokkal, elemzésnek vagy parzolásnak hívjuk. A elemzés egyben a levezetési fa felépítését is jelenti. Ezen eljárások többsége két csoportra osztható: top down: bottom up: gyökértő a levelek felé levelektől a gyökér felé A top down módszerek általában könnyebben végrehajthatók. A bottom up módszerek a nyelvek bővebb osztályának kezelésére alkalmasak. 33

34 Top Down elemzés Visszalépéses algoritmussal (back - tracking) 1. Tekintsük a token sorozat bal oldalán álló első tokent és a nyelvtan kiindulási szimbólumára vonatkozó szabályokat. 2. Vegyünk egy olyan levezetési szabályt, mely jobb oldalának bal oldalán ez a token áll. 3. A kiválasztott szabályok alapján próbáljuk levezetni a következő tokent a) a terminálisokat egyeztetjük b) a nem terminálisokból levezetjük (2. lépés rekurzív hívása) 34

35 Példa: Pascal hoz hasonló típusokat megadó nyelvtan type simple id array [ simple ] of type simple integer char num dotdot num array [ num dotdot num ] of integer elemzése 35

36 LÉPÉS ELEMZÉS BEMENET 1, type array [ num dotdot num] of integer type 2. array [ simple ] of integer array [ num dotdot num] of integer type 3. array [ simple ] of integer array [ num dotdot num] of integer type 3.1 array [ num dotdot num] of integer array [ simple ] of integer 36

37 LÉPÉS LEVEZETÉS BEMENET 3.2 rekurzió: 2. lépés type array [ simple ] of type array [ num dotdot num] of integer num dotdot num type 3.1 array [ num dotdot num] of integer array [ simple ] of type num dotdot num 37

38 LÉPÉS LEVEZETÉS BEMENET visszalépés a rekurzióban type 3.1 array [ num dotdot num] of integer array [ simple ] of type num dotdot num type 3.2 array [ num dotdot num] of integer array [ simple ] of type num dotdot num 38

39 LÉPÉS LEVEZETÉS BEMENET rekurzió 2. lépés type array [ simple ] of type array [ num dotdot num] of integer num dotdot num simple type array [ simple ] of type 3.2 array [ num dotdot num] of integer num dotdot num simple integer 39

40 Ha a 3.1 vagy 3.2 nem sikerül, akkor visszatérünk a 2. lépéshez és újabb szabályt választunk, ha ilyen nincs, akkor visszalépünk a rekurzióban. Azt a speciális esetet, amikor nincs szükség visszalépésre, előrejelző elemzésnek (predictive parsing) hívjuk. 40

41 Előrejelző levezetés (predictiv parsing) rekurzív eljárások egy halmaza dolgozza fel a nyelvtan minden nemterminálisához egy-egy rekurzív eljárás tartozik Előrejelző levezetés esetén a következő illesztendő token (look ahead) alapján egyértelműen eldönthető, hogy mely szabályt kell alkalmazni, illetve mely eljárást kell meghívni. procedure match (t : token) begin if lookahead = t then lookahead := next token else error end 41

42 procedure type begin if lookahead is in { integer, char, num } then simple else if lookahead = then begin match ( ); match ( id ) end else if lookahead = array then begin match ( array ) match ( [ ) simple match ( ] ) match ( of ); type end else error end 42

43 procedure simple begin if lookahead = integer then match ( integer ) else if lookahead = char then match ( char ) end else if lookahead = num then begin match ( num ) match ( dotdot ) match ( num ) end else error end 43

44 Az előrejelző elemzés csak akkor műkodik, ha egyértelműen eldönthető, hogy a következő token mely szabály jobb oldalából vezethető le, másképp, mi lehet az első token ami egy szabály alkalmazása során generálódik. Egy α sorozatból levezethető első tokenek halmazát FIRST(α) jelöli. Pl.: type ból levezethető szabályokról kell döntenünk type simple id array [simple] of type First ( simple ) = { integer, char, num } First ( id ) = { } First ( array ) = { array} Visszalépés nélküli elemzés lehetséges, ha minden A nemterminalis és bármely két A α és A β szabály esetén FIRST(α) FIRST(β) = (diszjunkt) 44

45 e szabályok kezelése A nemterminális e szabályokat akkor alkalmazzuk, ha a nemterminálisra a többi szabály nem alkalmazható (nem kell hibát jelezni, error helyett ezt alkalmazzuk) A First halmazok meghatározása Abban az esetben, ha a nyelvtan nem tartalmaz nemterminális e alakú szabályokat, akkor egy A nemterminálishoz tartozó First(A) halmaz tartalma a az A bal oldalú szabályok jobb oldalának első helyén álló terminálisok halmaza, és az A bal oldalú szabályok jobb oldalának első helyén álló nemterminálisok FIRST halmazámak uniója. Példa: A B A C A a A b FIRST(A) = {a,b} FIRST(B) FIRST(C) 45

46 Bal rekurzió mentesítés A Aα β A βr R αr c átalakítható: (R egy új nemterminális) ez azért fontos, mert: Bal rekurzív nyelvtanok esetén a Top - Down elemzés végtelen ciklusba eshet, mert úgy alkalmazunk szabályokat, hogy az elemzendő sorozat nem fogy. Az elemző levezető algoritmus végességét garantálja, ha a véges bemenetről a terminálisok fogynak egy szabály alkalmazásával. 46

47 FORDÍTÓPROGRAMOK IV. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

48 Példa: Fordítási séma római arab N A 1 B 0 C 0 D 0 B 1 C 0 D 0 C 1 D 0 D 1 A 1 M { print ( 1 ) } C 1 X { print ( 1 ) } A 1 MM { print ( 2 ) } C 1 XX { print ( 2 ) } A 1 MMM { print ( 3 ) } B 1 C { print ( 1 ) } C 1 XC { print ( 9 ) } B 1 CC { print ( 2 ) } C 0 C 1 C 0 e { print ( 0 ) } B 1 CM { print ( 9 ) } B 0 B 1 B 0 e { print ( 0 ) } D 1 I { print ( 1 ) } D 1 I { print ( 2 ) } D 1 IX { print ( 9 ) } B 0 B 1 D 0 e { print ( 0 ) } 48

49 Példa: Fordítási séma arab római N A 1 B 0 C 0 D 0 B 1 C 0 D 0 C 1 D 0 D 1 A 1 1 { print ( M ) } C 1 1 { print ( X ) } A 1 2 { print ( MM ) } C 1 2 { print ( XX ) } A 1 3 { print ( MMM ) } B 1 1 { print ( C ) } C 1 9 { print ( XC ) } B 1 2 { print ( CC ) } C 0 C 1 C 0 0 B 1 9 { print ( CM ) } D 1 1 { print ( I ) } B 0 B 1 D 1 2 { print ( II ) } B 0 0 D 1 9 { print ( IX ) } D 0 D 1 D

50 Példa: szintaxis vezérelt definíció (arab számok) expr term1 expr.t = term1.t expr expr 1 term0 expr.t = expr 1.t * 10 + term0.t term1 1 term1.t = 1 2 = = 9 term0 term1 term0.t = term1.t term0 0 term0.t = 0 levezetés 360-ra: expr = 36 * = 360 expr.t=3*10+6 term0.t = 0 expr.t = 3 term1.t = 3 term0.t = 6 term1.t =

51 Emlékezető A lexikai elemző feladata karakterek sorozatából tokenek sorozatát létrehozni. A szintaktikai elemző tőle kéri a tokeneket FORRÁS SZÖVEG LEXIKAI ELEMZŐ TOKEN ÚJABB TOKEN SZINTAKTIKAI ELEMZŐ SZIMBÓLUM TÁBLA A lexikai elemző tokeneket minták alapján azonosít. 51

52 Alapfogalmak Token: szintaktikai és szemantikai szempontból azonosan kezelt fogalom, amit a nyelvtanban egy szimbólum jelöl. Egy tokenhez tartozó mintázat: olyan karaktersorozatok, amik egyazon tokent eredményeznek. Lexéma: egy minta konkrét előfordulása a szövegben Például: TOKEN MINTÁZAT LEXÉMA OPERÁTOR Ha egy tokenhez több minta is tartozik, akkor a tokenhez attribútumokat rendelünk. 52

53 Például: E = M (adott kifejezés) token attribútumai EZEK ÉPÍTIK FEL A KIFEJEZÉST <id, mutató egy szimbólumtábla bejegyzésre> <assign_op, > <id, mutató egy szimbólumtábla bejegyzésre > Minták Formális definíciója: Pl.: reguláris kifejezésekkel Felismerése Pl.: véges autómatával 53

54 Előfeldolgozás Ismeretlen karaktersorozatról az feltételezzük, hogy új azonosító. Ha a feldolgozás további része ezen feltételezés alapján nem lehetséges, akkor visszalépünk és próbáljuk a hibát megkeresni. Egy karaktert törlünk Egy karaktert beszúrunk Két szomszédos karaktert felcserélünk Egy karaktert kicserélünk Alapelv: Azt a megoldást keressük, ami a legkevesebb módosítással vezet értelmezhető sorozathoz. Ekkor ezen módosítások száma a hibák száma 54

55 Pufferelés (Buffering) Ha több karakternyi előre és visszalépésre van szükség, akkor annak érdekében, hogy a karaktereket ne kelljen odavissza mozgatni, puffereljük és indexeljük őket. KARAKTEREK LEXÉMA ELEJE ÉPPEN VIZSGÁLT KARAKTER 55

56 Minták megadása Alapfogalmak ábécé: szimbólumok (karakterek) véges halmaza Karaktersorozat, vagy sztring (szó): szimbólumok véges sorozata az ábécéből Konkatenáció: két szó W 1 és W 2 konkatenáltja W=W 1 W 2 a két szó egymás után írva mint sorozat Van olyan szó, ami egyetlen karaktert sem tartalmaz, ez az üres szó, amit e vel jelölünk. A nyelv szavak, vagy karaktersorozatok halmaza 56

57 Műveletek nyelveken Unió: w L=L 1 L 2 pontosan akkor, ha w L 1 vagy w L 2 Konkatenáció: Kleene lezárt: w L 1 L 2 pontosan akkor, ha w =w 1 w 2 ahol w 1 L 1 és w 2 L 2 w L = L 1 * pontosan akkor, ha w = w 1 w 2 w 3 w n, ahol w i L i és n N ( n = 0 értelmezése: e L 1 *) 57

58 Reguláris kifejezés Egy ábécé minden eleme és e reguláris kifejezés. A kifejezés által definiált nyelvek: L(δ) = {δ} bármely δ {e} Ha r és s reguláris kifejezés, akkor r s reguláris kifejezés és L(r s) = L(r) L(s) r s reguláris kifejezés és L(r s) = L(r)L(s) r* reguláris kifejezés és L(r*) = L(r)* L((r)) = L(r) (extra zárójelezés megengedett) 58

59 Reguláris definíció: azon 1 reguláris kifejezés az ábécé felett azon 2... azon k reguláris kifejezés az ábécé elemei és azon 1, azon 2, azon k-1 azonosítók felett. További jelölések: Előfordulások számára (r)? L(r) {e} (r)+ L(r)L(r)* Karakter osztályok [abc] L([abc]) = {a} {b} {c} ( [abc] = a b c ) [A-Z] L([A-Z]) = {A} {B} {C} {Z} ( [A-Z] = A B C Z ) 59

60 FORDÍTÓPROGRAMOK V. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

61 Szintaktikai elemző A szintaktikai elemző helye a fordítás folyamatában TOKENEK FORRÀS SZÖVEG LEXIKAI ELEMZÕ TOKEN KERESÈS SZINTAKTIKAI ELEMZÕ LEVEZETÈSI FA Nyelvek Church tétel: általános nyelvtan által adott nyelvek és a Turing gép által elfogadott nyelvek ekvivalenciája. Cocke-Younger-Kamasi algoritmus általános nyelvtanok alapján képes nyelveket levezetni Minél szűkebb a nyelvi osztály annál hatékonyabb levezető algoritmusok tartoznak hozzá 61

62 Hibakezelés Alapvelvek: A hiba mibenlétét tisztán és pontosan meg kell tudnunk fogalmazni Gyorsan vissza kell tudni állítani a hibákat, hogy további hibákat detektálhassunk A hiba kezelő ( és detektáló ) nem lassíthatja le túlságosan a hibátlan nyelvek fordítását Hiba visszaállítási stratégiák ( error recovery ) pánikszerű (panic mode) egy blokkot hagy figyelmen kívül pl.: egy sort, egy begin-end pár közötti részt a hiba környezetében kifejezés szintű visszaállítás ( phrase level ) lokális javítások, ahol a levezető elakad pl.: vessző, pontosvessző csere, pontosvessző hozzáadása, pontosvessző figyelmen kívül hagyása 62

63 hiba előrevetítés ( error production ) tipikus hibák ismeretében olyan nyelvtan készítése, ami hibás kifejezéseket is eredményez, és ilyet levezetve pontos hibaüzenetet ad globális javítás ( global correction ) teljes szöveg legkevesebb javításával azt értelmessé tenni. Nagyon hasznos, de borzasztó költséges. CFG ( ismétlés ) levezetés levezetési fa egyértelműség nyelvek maghatározása Kérdés: reguláris kifejezésből, hogy kapok CFG-t? Válasz: reguláris kifej. NFA CFG ( reguláris nyelvtan ) Egy CFG reguláris pontosan akkor ha R ( V \ ) x * x ( ( V \ ) e ) 63

64 Példa: ab (a b ) a* ab a a S abq Q at bt T at e Balrekurzió eltüntetése: A Aα 1 Aα 2 Aα 3... Aα m β 1 β 2... β n helyett: A β 1 A β 2 A... β n A A α 1 A α 2 A... α m A e Balfaktorizálás: azonos előtagok eltüntetése A αβ 1 αβ 2... αβ 1n γ helyett A αa γ A β 1 β 2... β n S Q T b 64

65 Felülről lefelé levezetés ( top-down derivation ) Mélységi bejárással megtehető ( rekurzívan ) Előrejelző levezetés Balrekurzió eltüntetés Balfaktorizálás Egyértelműség Átvitel diagramok: minden nemterminálishoz kezdő és végállapot szükséges hozzá szabályok a kezdőből végállapotba elvezető utak éleken egy-egy szimbólummal ha az élen terminális áll, akkor beolvassuk, ha nemterminális, akkor átugrunk annak kezdő állapotába 65

66 Például: E T E E +T E e E: T E T E : + T E E : + e e 66

67 Előrejelző levezetés feltétele: átviteli diagramok determinisztikus volta, azaz ne létezzen több átvitel egy állapotból ugyanarra a bemenetre egyértelmű nyelvtant próbáljunk meghatározni ha a nemdeterminizmus nem tüntethető el, akkor előrejelző levezetés nem Megvalósítás: verem automatával Emlékeztető generál elfogad példa reguláris nyelvek reg. exp. reg. gram. véges aut. a*b* CF nyelvek CFG verem aut. a n b n általános nyelvek ált. nyelvtan R V*(V\ )V*xV* Turing gép a n b m c n d m 67

68 CFG veremautomata Általában a verem automata nem determinisztikus így nem megvalósítható Determinisztikus esetben rekurzió nélkül is megvalósítható: A levezetési táblázat megadja a bemenet alapján, hogy mely szabályt kell alkalmazni. E a a b b + + E T E T+ T a T b BEMENET VEREM ELÕREJELZÕ LEVEZETÕ KIMENET LEVEZETÈSI TÀBLÀZAT 68

69 Példa: E TE T FT T *FT e E +TE e F id ( E ) A levezetési táblázat: Nem terminális id + Bemeneti szimbólumok * ( ) $ E E TE E TE E E TE E e E e T T FT T FT T T e T *FT T e T e F F id F ( E ) 69

70 Ez alapján az id + id * id levezetése: verem $E $E T $E T E $E T id $E T $E $E T+ $E T bemenet id+id*id$ id+id*id$ id+id*id$ id+id*id$ +id*id$ +id*id$ +id*id$ id*id$ kimenet E TE T FT F e T e E +TE 70

71 FORDÍTÓPROGRAMOK VI. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

72 A levezetési táblázat elkészítése FIRST és FOLLOW segédfüggvények FIRST 1. Ha x egy terminális, akkor FIRST (x) = {x} 2. Ha van x e szabály, akkor e FIRST (x) 3. Ha x egy nemterminális és x y 1 y 2...y k egy szabály, akkor: a. Minden j k-ra, ha e FIRST (y i ) minden i= 1, 2,...j-1-re akkor FIRST (y j ) \ {e} FIRST (x) b. ha e FIRST (y i ) minden i= 1, 2,... k-ra akkor e FIRST (x) FOLLOW 1. Legyen $ FOLLOW (S), ahol S a kezdőszimbólum és $ a bemenetet lezáró szimbólum 72

73 2. Ha létezik A αbβ szabály, akkor legyen FIRST (β) \ {e} FOLLOW (B) 3. Ha létezik A αb vagy A αbβ ahol e FIRST (β) akkor FOLLOW (A) FOLLOW (B) Algoritmus 1. A nyelvtan minden A αszabályára hajtsuk végre 2-t és 3-at 2. Minden a FIRST (α) terminálisra, legyen (A α) M (A, a) 3. Ha e FIRST (α), akkor legyen (A α) M (A, b) minden b FOLLOW (A) terminálisra vagy $-ra 4. Minden nem definiált mezőjébe M-nek írjunk hibajelzést 73

74 LL (1) nyelvek Ha a nyelvtan nem egyértelmű vagy balrekurzív, akkor biztosan lesz legalább egy cellája a levezetési táblázatnak, ami egynél több szabályt tartalmaz. Előrejelző levezetés csak akkor alkalmazható, ha minden cella legfeljebb egy szabályt tartalmaz. Azokat a nyelveket, melyekre a levezetési táblázat minden cellája legfeljebb egy szabályt tartalmaz, LL (1) nyelveknek hívjuk. L balról olvasva L a legbaloldalibb nem terminálist tekintve 1 egy karakter előreolvasás alapján eldönthető egyértelműen, hogy melyik szabályt kell alkalmazni 74

75 LL (1) nyelvek megkülönböztető tulajdonságai Ha A α β része a nyelvnek, akkor 1. α-ból és β-ból nem vezethető le ugyanolyan terminálissal kezdődő szó 2. α és β közül legfeljebb az egyikből vezethető le e 3. Ha β * e, akkor α-ból nem vezethető le olyan a terminálissal kezdődő szó, melyre a FOLLOW (A) Bemutatott eszközök alkalmazása hiba visszaállításban Pánikszerű: A kifejtésénél olyan karakterre jutunk, amire nincs szabály a táblázatban, akkor a bemeneten az első a FOLLOW (A) karakterig olvasunk ha a bemeneten lévő karakter b FIRST (B), akkor átugrunk a B nemterminálisra 75

76 Kifejezés szintű hibakezelés: A levezetési táblázat nemdefiniált celláiba a hibakezelő függvények címeit írjuk, amik elvégzik a karakterek lokális beillesztését vagy törlését Feladat: Készítsünk előrejelző levezetőt ( parser -t vagy más néven szintaktikai elemzőt ) a következő nyelvtanhoz bexpr bexpr or bterm bterm bterm bterm and bfactor bfactor bfactor not bfactor (bexpr) true false Mivel balrekurziót tartalmaz ezért előtte balrekurzió mentesíteni kell: bexpr bterm bexpr bexpr or bterm bexpr e bterm bfactor bterm bterm and bfactor bterm e bfactor not bfactor (bexpr) true false 76

77 A FIRST halmazok FIRST (bfactor) = { n, (, t, f } FIRST (bterm ) = { e, a } FIRST (bterm) = FIRST (bfactor) = { n, (, t, f } FIRST (bexpr ) = { o, e ) FIRST (bexpr) = FIRST (bterm) = { n, (, t, f } A FOLLOW halmazok 1. { $ } FOLLOW (bexpr) 2. ( ahol nem terminális van a szabály belsejében) FIRST ( ) ) = { ) } FOLLOW (bexpr) FIRST (bterm ) \ { e } FOLLOW (bfactor) FIRST (bexpr ) \ { e } FOLLOW (bterm) 77

78 3. e FIRST (bterm ) ebből következik, hogy FOLLOW (bterm ) FOLLOW (bfactor) FOLLOW (bterm) FOLLOW (bterm ) továbbá e FIRST (bterm ) miatt FOLLOW (bterm) FOLLOW (bfactor) e FIRST (bexpr ) FOLLOW (bexpr ) FOLLOW (bterm) FOLLOW (bexpr) FOLLOW (bexpr ) továbbá e FIRST (bexpr ) miatt FOLLOW (bexpr) FOLLOW (bterm) A fentiek alapján az alábbi gráf írható fel: {$} FOLLOW(bexpr) {)} {a} FOLLOW(bfactor) {ο} FOLLOW(bterm) FOLLOW(bterm ) FOLLOW(bexpr ) 78

79 A FOLLOW halmazok a gráfról leolvashatóak FOLLOW (bexpr) = { ), $ } FOLLOW (bexpr ) = { ), $ } FOLLOW (bterm) = { ), $, o } FOLLOW (bterm ) = { ), $, o } FOLLOW (bfactor) = { ), $, o, a } A levezetési táblázat n ( t f a o ) $ expr or bterm bexpr bexpr bexpr bterm bexpr bexpr bterm bterm bfactor bterm bexpr e bterm and bfactor bterm bterm bterm e bfactor not (bex) true false 79

80 A levezetési fa bexpr bterm bexpr' bfactor bterm' or bterm bexpr' true e bfactor ( bexpr ) bterm' e bterm bexpr' bfactor bterm' true e e 80

81 FORDÍTÓPROGRAMOK VII. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

82 Alulról felfelé parzolás (Bottom-up) más néven: eltol-redukál (shift reduce) levezetők építés a levéltől kezdve szabályokat visszafelé alkalmazva: szövegrész cseréje nem-terminálisra = redukció mígnem a kezdő szimbólumhoz jutunk Példa S aabf A Abc b B d Nyelvtan esetén: abbcdf aabcdf aadf aabf S 82

83 Handle (fogódzó, kapaszkodó): az a mintázat amire visszafelé alkalmazunk egy szabályt Példa E E + E E E * E E ( E ) E id Nyelvtan esetén: Handle Redukáló szabály id 1 + id 2 * id 3 E + id 2 * id 3 E + E * id 3 E + E * E E + E id 1 id 2 id 3 E * E E + E E id E id E id E E * E E E + E E 83

84 Megvalósítás veremmel a bemenetet pakoljuk a verembe, amíg nem redukálható CFG: ha egy szó levezethető, akkor mindig a leginkább jobbra levő nemterminálist kifejtve is levezethető ( rightmost derivation ), így a handle mindig a verem tetején lesz Akciók 1. eltolás (bemenet verem) (shift) 2. redukálás (szabály alkalmazása visszafelé) (reduce) 3. elfogad (accept) 4. hiba (error) Dilemmák eltol / redukál dilemma: eltol vagy redukál? redukál / redukál dilemma: mely szabályt alkalmazzuk? 84

85 Példa (megvalósítás veremmel) Verem $ $id 1 $E $E+ $E+id 2 $E+E $E+E* $E+E*id 3 $E+E*E $E+E $E Bemenet id 1 + id 2 * id 3 $ + id 2 * id 3 $ + id 2 * id 3 $ id 2 * id 3 $ * id 3 $ * id 3 $ id 3 $ $ $ $ $ Akció eltolás redukálás E id eltolás eltolás redukálás E id eltolás eltolás redukálás E id redukálás E E*E redukálás E E+E elfogad 85

86 A LR(k) nyelvi osztály L balról jobbra olvassuk a bemenetet R legjobboldalabbi nemterminális cseréjét (rightmost derivation) feltételezve k k karakter hosszúságban látjuk előre a bemenetet LR (0): semmit nem látunk csak shift-tel behozunk valamit a verembe LR levezető VEREM BEMENET a 1 a 2 a n $ s m x m s m1 Kezelő program KIMENET s 0 akció lépés 86

87 A veremben S i egy állapot, ami korábban a verembe pakoltakról hordoz információt, meghatározása DFAval: Konfiguráció: (s 0 x 1 s 1... x m s m, a i a i+1... a n $) ( verem tartalma, be nem olvasott bemenet ) akciók: az LR levezetési táblázat alapján 1. Ha az akció [s m, a i ] = eltol s, akkor a következő konfiguráció: (s 0 x 1 s 1... x m s m a i s, a i+1 a i+2... a n $) 2. Ha [s m, a i ] = redukál A B, B = r és s = lépés[s m-r, A] akkor a következő konfiguráció: (s 0 x 1 s 1... x m-r s m-r A s, a i a i+1...a n $) 3. Ha [s m, a i ] = elfogad, akkor elfogad 4. Ha [s m, a i ] = hiba, akkor hiba-visszaállító eljárás 87

88 Levezető algoritmus Bemenet: a bemeneti szimbólumsorozat = w LR levezetési táblázat (akciók + lépések) Kimenet: ha w L(G), akkor levezetési fa, különben hibakezelés Módszer: - Egy s 0 kezdő állapot van a verem alján és w$ a bemeneten induláskor - A levezető programot futtatjuk míg elfogad vagy hiba üzenetet nem ad. Példa A következő nyelvtanra: 1. E E +T 2. E T 3. T T * F 4. T F 5. F (E) 6. F id 88

89 89 Állapot táblázat F T E $ ) ( * + id r5 r5 r5 r5 11 r3 r3 r3 r3 10 r1 r1 s7 r1 9 s11 s s4 s s4 s5 6 r6 r6 r6 r s4 s5 4 r4 r4 r4 r4 3 r2 r2 s7 r2 2 elf. s s4 s5 0 lépések akciók állapot

90 1. s i eltolás és i állapot a verembe 2. r j eltolás és j -edik szabály alkalmazásával 3. elfogad elfogad 4. üres mező hiba SLR levezetési táblázat készítése SLR = ( Simple LR ) LR(0) tételek: szabályok és a jobb oldalon egy pont A XYZ A X YZ A XY Z A XYZ Ha a pont előtti részből levezethető szimbólum sorozat van a veremben, akkor arra számítunk, hogy a pont utáni részből levezethető szimbólum sorozat van a bemeneten 90

91 Lezárt (closure): Legyen I egy tételhalmaz: 1. Kezdetben I lezárt (I) 2. Ha A α Bβ lezárt (I) és B σegy szabály, akkor B σ lezárt (I) 2-t addig alkalmazzuk, míg új tétel kerül a lezárt (I)-be Példa E E E E + T T T T * F F F (E) id nyelvtanra nézve: Legyen I = {E E}, ekkor (closure) lezárt (I) = { E E, E E+T, E T, T T*F, T F, F (E), F id} 91

92 Lépés (goto): lépés ( I, X ) olyan A αx β tételeket tartalmazó halmaz lezártja amelyekre A α X β I LR(0) tételek kanonikus kollekciója procedure procedure items( G ) begin C:={ closure ( { s s }) }; end repeat for each set of items I in C and each grammar symbol X such that goto ( I, X ) is not empty and not in C do add goto ( I, X ) to C until no more items can be added to C 92

93 Példa Nyelvtan: E E E E + T T... T T * F F F (E) id I 0 : I 1 : E E E E E E + T E E + T E T T F I 2 : F (E) E T F id T T * F T T*F 93

94 I 3 : I 7 : T F T T* F F ( E ) I 4 : F id F ( E ) E E + T I 8 : E T F ( E ) I 5 : I 9 : F id E E + T I 6 : I 10 : E E + T T T * F T T* F T F I 11 : F ( E ) 94

95 FORDÍTÓPROGRAMOK VIII. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

96 Tekintsük a következő véges automatát: állapotai a tételek (mely szabály alkalmazásában hányadik szimbólumnál tartunk) állapotátmenetek egy szimbólum olvasásával az állapot nem egyértelmű már kezdetben sem analógiák: e e item 1 item 2... a a NFA DFA átalakítás A DFA állapotai az NFA állapotainak halmazai S = E ( S ) δ(a,σ) = U E(p) minden (q,σ,p), q A esetén Az állapotok a tételek halmazai I 0, I 1 I 0 = closure({ S S }) I 1 = goto( I 1,σ ) 96

97 Példa: (az előző példa folytatása) I 0 = closure ( { E E } ) = { E E, E E + T, E T, T T * F, F ( E ), F id } ) goto ( I 0, E ) = closure ( { E E, E E + T } ) = { E E, E E + T } = I 1 goto ( I 0, T ) = closure ( { E T, T T * F } ) = {E T, T T * F } = I 2 goto ( I 0, F ) = closure ( { T F } ) = { T F } = I 3 goto ( I 0, ( ) = closure ( { F ( E ) } ) = {F ( E ), E E + T, E T, T T * F, T F, F ( E ), F id}= I 4 goto ( I 0, id ) = closure ( { T id } ) = { T id } = I 5 goto ( I 1, + ) = closure ( { E E + T } ) = { E E + T, T T * F, T F, F ( E ), F id} = I 6 goto ( I 2, * ) = closure ( {T T * F } ) = {T T * F, F ( E ), F id}= I 7 97

98 goto ( I 4, E ) = closure ( { F ( E ), E E + T } ) = {F ( E ), E E + T } = I 8 I 1 + I 6 T I 9 E F ( + * T I 2 * I 7 I 10 F T ( I 0 I 3 ( ( F I 4 E I 8 ( I 11 id id + I 5 98

99 SLR levezetési táblázat generálása 1. Legyen C = { I 0, I 1,, I n } LR(0) tételek halmazának kollekciója 2. Az i. állapot megfelel a I i halmaznak. Az i. állapothoz tartozó levezetési akciók: a. Ha A α a β I i és goto (I i, a ) = I j akkor akció [ i, a ] = eltol j b. Ha A α I i, akkor akció [ i, a ] = redukál A α minden a follow ( A ) esetén. ( A nem lehet s ) c. Ha s s I i, akkor az akció [ i, $ ] = elfogad Megjegyzés: Ha az akció mátrix valamely mezőjére több szabályunk is van, akkor a nyelv nem SLR-beli. 3. Minden A nem terminálisra, ha goto ( I i, A ) = I j, akkor akció [ i, a ] = j 4. Azokhoz a mezőkhöz amiket az 1, 2, 3 lépések nem definiáltak hibaüzenetet rendelünk 5. A kezdő állapot az, amelyekhez tartozó halmaz a s s et tartalmazza 99

100 Példa nyelvtan: E E (1) E E + T T (2,3) T T * F F (4,5) F ( F ) id (6,7) first halmazok: first ( + ) = { + } first ( * ) = { * } first ( ( ) = { ( } first ( ) ) = { ) } first ( E ) = first ( E ) first ( E ) = first ( T ) first ( T ) = first ( F ) first ( F ) = { (, id } Megjegyzés: csak az érdekel, hogy az e ne legyen eleme egyetlen first halmaznak sem, tehát egyik nem terminális sem eltüntethető. 100

101 follow halmazok: $ follow ( E ) follow ( E ) follow ( E ) (1) + follow ( E ) (2) follow ( E ) follow ( T ) (2,3) * follow ( E ) (4) follow ( T ) follow ( F ) (4,5) ) follow ( E ) (6) Ebből következik, hogy: follow ( E ) = { $ } follow ( E ) = { +, ), $ } follow ( T ) = { +, *, ), $ } follow ( F ) = { +, ), $ } 101

102 Akciók és eltolások: Például: Például: I 0 = { E E, E E + T, E T, T T * F, F ( E ), F id} ( 2.a lépés ) akció [ 0, ( ] = eltol 4 akció [ 0, id ] = eltol 5 I 1 = { E E, E E + T } ( 2.a lépés ) ( 2.c lépés ) akció [ 1, + ] = eltol 6 akció [ 1, $ ] = elfogad 102

103 Például: I 2 = { E T, T T * F } ( 2.b lépés ) mivel follow ( E ) = { +, ), $ } ezért akció [ 2, $ ] = akció [ 2, + ] = akció [ 2, ) ] = = redukál E T 103

104 FORDÍTÓPROGRAMOK IX. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

105 Nem SLR nyelvek Tekintsük a következő nyelvtant ( L left value, R right value, *R value of R ) S L = R S R L *R L id R id Kanonikus LR(0) tételek erre a nyelvtanra: I 0 = { S S, S R, L * R, L id, R id, S L = R } I 1 = { S S } I 2 = { S L = R, R L } 105

106 Tekintsük az I 2 halmazt S L = R akció [ 2, = ] = eltol 6 mivel = follow ( R ) R L akció [ 2, = ] = redukál R L tehát egy s / r ( eltol / redukál ) konfliktus keletkezett, mivel a levezetési táblázat egyazon cellájába két értéket akartunk beírni. Mivel a nyelvtan egyértelmű, így arra következtetünk, hogy nem SLR-beli. Kanonikus LR levezetési táblázatok SLR esetén A αredukáló lépést alkalmazunk, ha i állapotban [ A α ] I i és a follow ( A ) Előfordulhat, hogy i állapotban βα van a verem tetején úgy, hogy βa után nem következhet a a szóban. Megoldás: további információt viszünk az állapotba: egyenként pontosan megadjuk, hogy mely bemeneti karakter esetén redukálható α az A-ra. 106

107 LR(1) tételek [ A α β, a ] ahol A αβegy szabály és a pedig egy terminális vagy $ Megjegyzés: Az előreolvasás a [ A α β, a ] tételeket nem befolyásolja ha β e de Egy [ A α β, a ] LR(1) tétel egy γ előtagra érvényes ha ahol: 1. γ = δ α 2. a az w első szimbóluma ( terminális ), vagy w = e és a = $ A lezárt újrafogalmazása: Ha egy [ A α Bβ, a ] tétel érvényes egy γ előtagra, akkor ahol γ = δ α R G R S δaw σαβw G S δaax σαbβax R G 107

108 βax by Tegyük fel hogy, a, ekkor minden B ηszabály esetén Tehát [ B η, b ] érvényes a δ előtagra. b lehet az első terminális ami β-ból került levezetésre, vagy β-ból levezethető βax by e a levezetése során, ekkor b = a, másképpen b egy tetszőleges terminális a First ( βax )-ből. Mivel a terminális így First ( βax ) = First ( βa ). Az LR(1) tételek algoritmikus leszámolása: function closure ( I ) begin repeat R G R for each item [ A α Bβ, a ] I each production β δ in G and each terminal b first ( βa ) G S σbby σηby R G 108

109 end such that [ B η, b ] I do add [ B σ, b ] to I until no more items can be added to I return I function goto ( I, X ) begin end Let J be the set of items [ A αx β, a ] such that [ A αx β, a ] I return closure ( J ) procedure items ( G ) begin C:= { closure ( { [ s S, $]} ) } repeat for each setofitemsi inc and each granted symbol X 109

110 end Példák such that goto ( X, I ) is not empty in C do add goto ( X, I ) to C until no more set of items can be added to C Tekintsük a { [ S S, $ ] } halmazt Kérdés: [ S S, $ ] hogyan írható [ A α Bβ, a ] alakba Válasz: A = S B = S a = $ α = e β = e A closure eljárás szerint [ B δ, b ] alakú tételeket generálunk minden B δszabályra és b first ( βa ) terminálisra Legyen a vizsgált nyelvtan: S S S CC C cc d ekkor [ S CC, $ ] kerül a lezártba 110

111 Tekintsük a [ S CC, $ ] tételt: [ A α Bβ, a ] alakba írható, ha A = S, α = e, β = C, B = C, a = $ ekkor: first ( βa ) = first ( β$ ) = first ( C ) = { c, d } tehát: [ C cc, c ], [ C cc, d ], [ C d, c ], [ C d, d ] I 0 : s-el átmenve I 1 : S S, $ S S, $ S CC, $ c-vel átmenve I 2 : C CC, c / d S C C, $ C d, c / d C CC, $ és így tovább C d, $ 111

112 Kanonikus LR levezetési táblázat generálása 1. Készítsük el a G nyelvre az LR(1) tételek halmazainak kollekcióját 2. Az i állapota a I i halmazt reprezentálja A levezetési akciókat a következő féle képen határozzuk meg: a. Ha [ A α aβ, b ] I i és goto (I i, a ) = I j akkor akció [ i,a ] = eltol j ahol a egy terminális b. Ha [ A α, a ] I i, A S akkor az akció [ i,a ] = redukál A α c. Ha [ S S, $ ] I j akkor akció [ i,$ ] = elfogad 3. Ha goto ( I i,a ) = I j akkor goto [ i, A ] = j 4. Minden nem definiált cellába írjunk hibaüzenetet 5. Kezdő állapot az, melyhez tartozó I i halmaz elem az [ S S, $ ] tétel 112

113 FORDÍTÓPROGRAMOK X. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

114 Szintaxisvezérelt fordítás Emlékezető: 1. Lexikai elemzés: szimbólumok azonosítása 2. Szintaktikai elemzés ( levezetés ): nyelvi szimbólumok szimbólumok nyelvtani kapcsolata 3. Szemantikai elemzés: szimbólumok kapcsolatainak jelentése Szemantikai szabályok leírására Szintaxis vezérelt definíciók Fordítási séma Szintaxis vezérelt definíció A nyelvi szimbólumokhoz attribútumokat rendeltünk a. Szintetizált attribútumok A levezetési fában a gyermekekhez rendelt attribútumokból számoljuk a szülő attribútumait Szabályban: a bal oldalon álló szimbólum attribútuma a jobb oldalon álló szimbólumok attribútumainak függvénye 114

115 b. Származtatott vagy örökölt attribútum A fában egy csúcshoz tartozó szimbólum attribútumait a szülők és testvérek attribútumaiból számoljuk Szabályban: a jobb oldalon álló szimbólumok attribútumait a bal és a jobb oldalon álló szimbólumok attribútumaiból számoljuk Szintetizált attribútum Példa: Nyelvi szabályok L En E E 1 + T E T T T 1 * F T F F ( E ) F digit Szemantikai szabályok print ( E.val ) E.val := E 1.val + T.val E.val := T.val T.val := T 1.val * F.val T.val := F.val F.val := E.val F.val := digit.lexval 115

116 Ekkor a 3*5+4n levezetése L print(19) E.val=15+4=19 n E.val=15 + T.val=4 T.val=3*5=15 F.val=4 * T.val=3 F.val=5 digit.lexval=4 F.val=3 digit.lexval=5 digit.lexval=3 Bejárási sorrend: alulról-felfelé 116

117 Származtatott attribútumok Gyakran átírható szintetizált attribútumokra, de néha származtatottal könnyebb megfogalmazni Példa: ( típusdefiníció ) Nyelvi szabályok D T L T int T real L L 1, id L id Szemantikai szabályok L.in := T.type T.type := integer T.type := real L 1.in := L.in addtype ( id.entry, L.in ) addtype ( id.entry, L.in ) 117

118 Példa: levezetés típusdefiníció alapján: real(id 1,id 2,id 3 ) D T.type=real L.in=real real, L.in=real id 3, L.in=real id 2 Függőségi gráf id 2 Csúcsok: attribútumok Élek: ha a értékéből kiszámoljuk b -t, akkor b függ a -tól, amit a b jelöl. attribútumok ettol függ ez 118

119 Topológiai rendezésnek nevezzük a csúcsok egy V 1, V 2,, V n sorrendjét, ha minden V i V j élre i< ja rendezés szerint A topológikus rendezés ad egy megfelelő sorrendet az attribútumok kiértékelésére Példa: szintetizált attribútumok Lehetséges kiértékelési sorrendek: 4, 5, 6, 2, 7, 8, 3, 1 4, 7, 6, 8, 3, 5, 2, 1 119

120 Szintaxisvezérelt definíciók alkalmazása: szintaxisfa készítése A szintaxisfa egy dinamikus adatszerkezet, ami leírja a levezetés eredményét ( a levezetési fa tömörített formája ) Például: 3*5+4 A szintaxisfa felépítéséhez használt szintaxis vezérelt definíciók Például: Nyelvi szabályok E E 1 + T E E 1 -T E T T ( E ) T id T num Szemantikai szabályok E.nptr := mknode ( +, E 1.nptr, T.nptr) E.nptr := mknode ( -, E 1.nptr, T.nptr) E.nptr := T.nptr T.nptr := E.nptr T.nptr := mkleaf (id, id.entry) T.nptr := mkleaf (num, num.val) 120

121 Példa: a-4+c -hez tartozó szintaxisfa: + - id id num C címére mutató mutató to entry for a A szintetizált attribútumok kiszámítása a levezető ( parser ) vermének alkalmazásával Mivel a szintetizált attribútumokat alulról-felfelé számoljuk így alulról-felfelé ( bottom-up ) levezető kell Például: LR levezető Amikor szabályt alkalmazunk visszafelé, akkor a szintetizált attribútumokat is kiszámoljuk 121

122 Például: Nyelvi szabályok L E n L E 1 + T E T T T 1 * F T F F ( E ) F digit Szemantikai szabályok print ( val[ top ] ) val[ ntop ] := val[ top-2 ] + val[ top ] val[ ntop ] := val[ top-2 ] * val[ top ] val[ ntop ] := val[ top-1 ] Ha egy olyan szabályt redukálunk amelynek jobb oldalán r szimbólum van akkor: ntop := top r

123 L-attribútumú definíció Ha egy A X 1 X 2 X n esetén az X j attribútuma ( 1 j n ) csak a következőktől függ: Az X 1 X 2 X j-1 szimbólumok attribútumaitól és A -nak a származtatott attribútomaitól LL levezetőkkel ( pl: perdiktív parser ) és a levezetési fa mélységi bejárásával számolható Fordítási sémák ( emlékeztető ) A szabályok jobb oldalába { } közzé tett szemantikai akciókat ágyazunk A szemantikai akciók végrehajtása a levezetési fa bejárásának megfelelően Példa: infix postfix átalakítás E E + T { print ( + ) } E E - T { print ( - ) } E T E 0 { print ( 0 ) } : : E 9 { print ( 9 ) } 123

124 A levezetési fája E {print ( 9 )} E + T {print ( + )} E - T 2 {print ( 2 )} T 5 {print ( 5 )} 9 {print ( 9 )} Felülről lefelé fordítás ( top-down translation ) A.a=g(g(f( X.x ), Y 1.y ), Y 2.y ) A.a=g(f(X.x),Y 1.y) Y 2 A.a=f(X.x) Y 1 X 124

125 Balrekurzív nyelvtanunk van Attribútumokat alulról-felfelé számoljuk Ezzel szemben: Előrejelző levezetőt szeretnénk használni a. Jobb rekurzív nyelvtant használunk Az attribútumokat felülről lefelé számoljuk A X R.i = f(x.x) Y 1 R.i = g(f(x.x), Y 1.y) Y 2 R.i = g(g(f(x.x), Y 1.y, Y 2.y) e 125

126 a. b. szintaxis fa elkészítése E E 1 + T { E.nptr := mknode ( +, E 1.nptr, T.nptr ) } E E 1 T { E.nptr := mknode (, E 1.nptr, T.nptr ) } E T { E.nptr := T.nptr } Balrekurzió mentesítés után: E T { R.i := T.nptr } R { E.nptr := R.s } R + T { R 1.i := mknode ( +, R.i, T.nptr ) } R 1 { R.s := R 1.s } R -T { R 1.i := mknode ( -, R.i, T.nptr ) } R 1 { R.s := R 1.s } R e T ( E ) { T.nptr := E.nptr } T id { T.nptr := mkleaf ( id, id.entry ) } T num { T.nptr := mkleaf (num, num.val) } 126

127 E T.nptr R.i id - T.nptr R.i id num + T.nptr R.s - + id e num id c Előretekintő levezetővel megvalósítható Felépítjük a szintaxisfát rögtön ki tudjuk értékelni 127

128 Rekurzív kiértékelés Amikor az attribútumok nem értékelhetőek ki a levezetéssel párhuzamosan Függvényekkel járjuk be a levezetési fát egy csúcs gyermekeit nem feltétlenül balról-jobbra olvasva 128

129 FORDÍTÓPROGRAMOK XI. Előadás Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék

130 Megjegyzés ( szóhasználat ) Azokat a szintaxis vezérelt definíciókat, melyek csak szintetizált attribútumokat tartalmaznak S attribútumú definícióknak nevezzük Örökölt ( származtatott ) attribútumok kiértékelése alulról-felfelé Emlékeztető: Az LR levezetők a nyelvek bővebb osztályát fogadják el, mint az LL levezetők A bemutatásra kerülő eljárás L-attribútumú definíciók kiértékelésére képes Mivel LR esetén csak a szabálynak megfelelő minta végére érve tudjuk pontosan mely szabályt kell levezetni visszafelé, így a szemantikai akcióknak a szabály végén kell lennie A beágyazott akciók eltüntethetőek, új nem terminális szimbólumok úgynevezett jelzők ( markerek ) bevezetésével 130

131 Például: E TR R + T { print ( + ) } R -T { print ( - ) } R e T num { print ( num.val( ) )} Átalakítható: E TR R + TMR - TMR e T num { print ( num.val( ) ) } M e { print ( + ) } M e { print ( - ) } Származtatott attribútumok a veremben Fordítási séma P TL { L.in := T.type } T int { T.type := integer } T real {T.type := real } L L 1 id { L 1.in := L.in; addtype ( id entry, L.in ) } L id { addtype ( id entry, L.in ) } 131

132 real p,q,r levezetése D Bemenet Verem Levezetési szabály real p,q,r - T.type L.in p,q,r p,q,r real T T real real L.in, r,q,r,q,r Tp TL L id L.in, q q,r,r,r TL,q TL TL, p r TL,r TL L L,id D D TL 132

133 Amikor L-re redukálunk egy szabály jobb oldalát, akkor mindig T van a veremben alatta, így annak típusához közvetlenül hozzáférünk Szabály D TL T int T real L L, id L id Kódrészlet val[ ntop ] := integer val[ ntop ] := real addtype ( val[ top ], val[ top 3 ]) addtype ( val[ top ], val[ top 1 ]) Ha a származtatott attribútumok forrása nem mindig ugyan olyan távolságra van, akkor segéd szimbólumokat vezetünk be 133

134 Példa: Nyelvi szabályok S a A C S b A B C C c Szemantikai szabályok C.i := A.s C.i := A.s C.s := g( C.i ) Átalakítható a következő formában Nyelvi szabályok S a A C S b A B M C C c M e Szemantikai szabályok C.i := A.s M.i := A.s; C.i := M.s C.s := g( C.i ) M.s := M.i Így a C.i számításához szükséges attribútum mindig ugyan olyan messze van a verem tetejétől 134

135 Ugyanezt a technikát használjuk, ha a számításhoz szükséges érték nincs mindig a veremben Például: ha a következő szabályt hozzátesszük az előzőekhez: Nyelvi szabályok S a A C Szemantikai szabályok C.i := f ( A.s ) átalakítható: Nyelvi szabályok S a A N C N e Szemantikai szabályok N.i := A.s; C.i := N.s N.s := f ( N.i ) így közvetlenül c elé kerül A atribútuma 135

136 Típus ellenőrzés ( Type checking ) Egyszerű: Olyan nyelvekre használható, ahol az azonosítókat előre kell definiálni ( előbb definiálni mint használni ) Például: ( D deklaráció, E kifejezés, T típus, pointer ) D D ; E D D ; D id : T T char integer array[ num ] of T T E literal num id E mod E E [ E ] E Megjegyzés array[256] of char, egy 256 hosszú tömb 1-től 256-ig indexelve integer, egészre mutató pointer 136

FORDÍTÓPROGRAMOK. MKSA3144F kidolgozott tételek. 0.6 -ás verzió. 2006 január 21., Domján Tamás

FORDÍTÓPROGRAMOK. MKSA3144F kidolgozott tételek. 0.6 -ás verzió. 2006 január 21., Domján Tamás FORDÍTÓPROGRAMOK MKSA3144F kidolgozott tételek 0.6 -ás verzió 2006 január 21., Domján Tamás A dokumentum alapja egy puska és Tóth Péter által készített jegyzet volt, azt egészítettem ki, így hibákat, hiányosságokat

Részletesebben

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések)

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések) Emlékeztető Emlékeztető: LR(0) elemzés A lexikális által előállított szimbólumsorozatot balról jobbra olvassuk, a szimbólumokat az vermébe tesszük. LR elemzések (SLR() és LR() elemzések) Fordítóprogramok

Részletesebben

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete A szemantikus elemzés elmélete Szemantikus elemzés (attribútum fordítási grammatikák) a nyelvtan szabályait kiegészítjük a szemantikus elemzés tevékenységeivel fordítási grammatikák Fordítóprogramok előadás

Részletesebben

Automaták és formális nyelvek

Automaták és formális nyelvek Automaták és formális nyelvek Bevezetés a számítástudomány alapjaiba 1. Formális nyelvek 2006.11.13. 1 Automaták és formális nyelvek - bevezetés Automaták elmélete: információs gépek általános absztrakt

Részletesebben

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1 Fordító részei Kód visszafejtés. Izsó Tamás 2016. szeptember 29. Izsó Tamás Fordító részei / 1 Section 1 Fordító részei Izsó Tamás Fordító részei / 2 Irodalom Izsó Tamás Fordító részei / 3 Irodalom Izsó

Részletesebben

A digitális számítás elmélete

A digitális számítás elmélete A digitális számítás elmélete 8. előadás ápr. 16. Turing gépek és nyelvtanok A nyelvosztályok áttekintése Turing gépek és a természetes számokon értelmezett függvények Áttekintés Dominó Bizonyítások: L

Részletesebben

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a Informatika szigorlat 17-es tétel: Felülről lefelé elemzések 1. Lexikális elemzés A lexikális elemző alapvető feladata az, hogy a forrásnyelvű program lexikális egységeit felismerje, azaz meghatározza

Részletesebben

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: A Formális nyelvek vizsga teljesítése a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: 1. Öt rövid kérdés megválaszolása egyenként 6 pontért, melyet minimum

Részletesebben

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

sallang avagy Fordítótervezés dióhéjban Sallai Gyula sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?

Részletesebben

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.ms.sapientia.ro/ kasa/formalis.htm Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezetű), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat Formális nyelvek a gyakorlatban Formális nyelvek, 1 gyakorlat Segédanyagok Célja: A programozási nyelvek szintaxisának leírására használatos eszközök, módszerek bemutatása Fogalmak: BNF, szabály, levezethető,

Részletesebben

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása A fordítóprogramok szerkezete Forrásprogram Forrás-kezelő (source handler) Kódoptimalizálás Fordítóprogramok előadás (A,C,T szakirány) Lexikális elemző (scanner) Szintaktikus elemző (parser) Szemantikus

Részletesebben

2018, Diszkrét matematika

2018, Diszkrét matematika Diszkrét matematika 3. előadás mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia 2018, őszi félév Miről volt szó az elmúlt előadáson? számtartományok: természetes

Részletesebben

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: A Formális nyelvek vizsga teljesítése a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: 1. Öt kis kérdés megválaszolása egyenként 6 pontért, melyet minimum 12

Részletesebben

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás L ATG E > TE' E' > + @StPushAX T @StPopBX

Részletesebben

Kiterjesztések sek szemantikája

Kiterjesztések sek szemantikája Kiterjesztések sek szemantikája Példa D Integer = {..., -1,0,1,... }; D Boolean = { true, false } D T1... T n T = D T 1... D Tn D T Az összes függvf ggvény halmaza, amelyek a D T1,..., D Tn halmazokból

Részletesebben

Aritmetikai kifejezések lengyelformára hozása

Aritmetikai kifejezések lengyelformára hozása Aritmetikai kifejezések lengyelformára hozása Készítették: Santák Csaba és Kovács Péter, 2005 ELTE IK programtervező matematikus szak Aritmetikai kifejezések kiértékelése - Gyakran felmerülő programozási

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa

Részletesebben

Programozás alapjai. 5. előadás

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

A számítógépes nyelvészet elmélete és gyakorlata. Automaták A számítógépes nyelvészet elmélete és gyakorlata Automaták Nyelvek és automaták A nyelvek automatákkal is jellemezhetőek Automaták hierarchiája Chomsky-féle hierarchia Automata: új eszköz a nyelvek komplexitásának

Részletesebben

Kifejezések. Kozsik Tamás. December 11, 2016

Kifejezések. Kozsik Tamás. December 11, 2016 Kifejezések Kozsik Tamás December 11, 2016 Kifejezés versus utasítás C/C++: kifejezés plusz pontosvessző: utasítás kiértékeli a kifejezést jellemzően: mellékhatása is van például: értékadás Ada: n = 5;

Részletesebben

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet)

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet) Fordítóprogramok. (Fordítóprogramok felépítése, az egyes komponensek feladata. A lexikáliselemző működése, implementációja. Szintaktikus elemző algoritmusok csoportosítása, összehasonlítása; létrehozásuk

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

Részletesebben

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény ELTE IK 1 Lexikális elemzés 1. Add meg reguláris nyelvtannal, reguláris kifejezéssel és véges determinisztikus automatával a következ lexikális elemeket!

Részletesebben

ZH feladatok megoldásai

ZH feladatok megoldásai ZH feladatok megoldásai A CSOPORT 5. Írja le, hogy milyen szabályokat tartalmazhatnak az egyes Chomskynyelvosztályok (03 típusú nyelvek)! (4 pont) 3. típusú, vagy reguláris nyelvek szabályai A ab, A a

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Fordító Optimalizálás

Fordító Optimalizálás Fordító Optimalizálás Kód visszafejtés. Izsó Tamás 2012. szeptember 27. Izsó Tamás Fordítás Optimalizálás / 1 Section 1 Fordító részei Izsó Tamás Fordítás Optimalizálás / 2 Irodalom Fordító részei Optimalizálás

Részletesebben

Fordítás Kódoptimalizálás

Fordítás Kódoptimalizálás Fordítás Kódoptimalizálás Kód visszafejtés. Izsó Tamás 2016. október 20. Izsó Tamás Fordítás Kódoptimalizálás / 1 Aktív változók Angol irodalomban a Live Variables kifejezést használják, míg az azt felhasználó

Részletesebben

Adatbázisok elmélete 12. előadás

Adatbázisok elmélete 12. előadás Adatbázisok elmélete 12. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE

Részletesebben

Algoritmizálás és adatmodellezés tanítása 1. előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az

Részletesebben

Programozási nyelvek (ADA)

Programozási nyelvek (ADA) 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

Részletesebben

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108 akonyv 2007/3/9 6:29 page 315 #327 Typotex Kiadó Tárgymutató Jelölések α,β,γ,..., vii, 290 a,b,c,..., vii, 290 A,B,C,..., vii B, 68 ε, vii F, 67 G, vii L, vii L, 68, 109 L(G), vii N, vii P, vii R, 109

Részletesebben

AWK programozás Bevezetés

AWK programozás Bevezetés 09 AWK programozás Bevezetés AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa és feldolgozhatóvá

Részletesebben

Kifejezések. Kozsik Tamás. December 11, 2016

Kifejezések. Kozsik Tamás. December 11, 2016 Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},

Részletesebben

BASH SCRIPT SHELL JEGYZETEK

BASH SCRIPT SHELL JEGYZETEK BASH SCRIPT SHELL JEGYZETEK 1 TARTALOM Paraméterek... 4 Változók... 4 Környezeti változók... 4 Szűrők... 4 grep... 4 sed... 5 cut... 5 head, tail... 5 Reguláris kifejezések... 6 *... 6 +... 6?... 6 {m,n}...

Részletesebben

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések 1. Feladat Az első feladatban szereplő - kérdések 1 Minden környezet független nyelv felismerhető veremautomatával. Minden környezet független nyelv felismerhető 1 veremmel. Minden 3. típusú nyelv felismerhető

Részletesebben

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe: BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli A versenyzők figyelmébe: 1. A tömböket 1-től kezdődően indexeljük. 2. A rácstesztekre

Részletesebben

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le. Bisonc++ tutorial Dévai Gergely A Bisonc++ egy szintaktikuselemz -generátor: egy környezetfüggetlen nyelvtanból egy C++ programot generál, ami egy tokensorozat szintaktikai helyességét képes ellen rizni.

Részletesebben

Programok értelmezése

Programok értelmezése Programok értelmezése Kód visszafejtés. Izsó Tamás 2016. szeptember 22. Izsó Tamás Programok értelmezése/ 1 Section 1 Programok értelmezése Izsó Tamás Programok értelmezése/ 2 programok szemantika értelmezése

Részletesebben

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására Nyelvek használata adatszerkezetek, képek leírására Formális nyelvek, 2. gyakorlat 1. feladat Módosított : belsejében lehet _ jel is. Kezdődhet, de nem végződhet vele, két aláhúzás nem lehet egymás mellett.

Részletesebben

Fordítóprogramok. Aszalós László. 2009. szeptember 7.

Fordítóprogramok. Aszalós László. 2009. szeptember 7. Fordítóprogramok Aszalós László 2009. szeptember 7. 1. Bemelegítés Honlap: www.inf.unideb.hu/ aszalos/diak.html (Fordítóprogramok, 2009) Jegymegajánló: utolsó hét előadásán. PótZH (csak gyakorlat) vizsgaidőszak

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK futtatási módok AWK parancs, közvetlen programkódmegadás: awk 'PROGRAMKÓD' FILE példa: ls -l awk '{print $1, $5}' a programkód helyére minden indentálás

Részletesebben

Csima Judit október 24.

Csima Judit október 24. Adatbáziskezelés Funkcionális függőségek Csima Judit BME, VIK, Számítástudományi és Információelméleti Tanszék 2018. október 24. Csima Judit Adatbáziskezelés Funkcionális függőségek 1 / 1 Relációs sémák

Részletesebben

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek 7a. Dr. IványiPéter Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a

Részletesebben

Véges automaták, reguláris nyelvek

Véges automaták, reguláris nyelvek Véges automaták, reguláris nyelvek Kiegészítő anyag az lgoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: lgoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 27. augusztus 3. véges automata

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók

Részletesebben

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.cs.ubbcluj.ro/~kasa/formalis.html Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

Formális nyelvek és automaták

Formális nyelvek és automaták Formális nyelvek és automaták Nagy Sára gyakorlatai alapján Készítette: Nagy Krisztián 2. gyakorlat Ismétlés: Megjegyzés: Az ismétlés egy része nem szerepel a dokumentumban, mivel lényegében a teljes 1.

Részletesebben

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik

Részletesebben

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat.

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat. Nyelvtani transzformációk Formális nyelvek, 6. gyakorlat a. S (S) SS ε b. S XS ε és X (S) c. S (SS ) Megoldás: Célja: A nyelvtani transzformációk bemutatása Fogalmak: Megszorított típusok, normálformák,

Részletesebben

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2)

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2) Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2) ábécé: Ábécének nevezünk egy tetszőleges véges szimbólumhalmazt. Jelölése: X, Y betű: Az ábécé elemeit betűknek hívjuk. szó: Az X ábécé elemeinek

Részletesebben

Adatszerkezetek 1. Dr. Iványi Péter

Adatszerkezetek 1. Dr. Iványi Péter Adatszerkezetek 1. Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot kódoltan tároljuk

Részletesebben

Teljes visszalépéses elemzés

Teljes visszalépéses elemzés Teljes visszalépéses elemzés adott a következő nyelvtan S» aad a A» b c elemezzük a következő szöveget: accd» ccd ddc S S a A d a A b c d a c c d a c c d Teljes visszalépéses elemzés adott a következő

Részletesebben

Komputeralgebra rendszerek

Komputeralgebra rendszerek Komputeralgebra rendszerek III. Változók Czirbusz Sándor czirbusz@gmail.com Komputeralgebra Tanszék ELTE Informatika Kar 2009-2010 ősz Index I 1 Szimbolikus konstansok kezelés A konstansok Nevek levédése

Részletesebben

Komputeralgebra rendszerek

Komputeralgebra rendszerek Komputeralgebra rendszerek III. Változók Czirbusz Sándor czirbusz@gmail.com Komputeralgebra Tanszék ELTE Informatika Kar 2009-2010 ősz Index I 1 Szimbolikus konstansok kezelés A konstansok Nevek levédése

Részletesebben

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

Részletesebben

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I. Számelmélet I. DEFINÍCIÓ: (Osztó, többszörös) Ha egy a szám felírható egy b szám és egy másik egész szám szorzataként, akkor a b számot az a osztójának, az a számot a b többszörösének nevezzük. Megjegyzés:

Részletesebben

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi. Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód

Részletesebben

Absztrakt adatstruktúrák A bináris fák

Absztrakt adatstruktúrák A bináris fák ciós lámpa a legnagyobb élettartamú és a legjobb hatásfokú fényforrásnak tekinthető, nyugodtan mondhatjuk, hogy a jövő fényforrása. Ezt bizonyítja az a tény, hogy ezen a területen a kutatások és a bejelentett

Részletesebben

Amortizációs költségelemzés

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

Bevezetés az informatikába

Bevezetés az informatikába Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

Kriptográfia 0. A biztonság alapja. Számítás-komplexitási kérdések

Kriptográfia 0. A biztonság alapja. Számítás-komplexitási kérdések Kriptográfia 0 Számítás-komplexitási kérdések A biztonság alapja Komplexitás elméleti modellek független, egyenletes eloszlású véletlen változó értéke számítással nem hozható kapcsolatba más információval

Részletesebben

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1 2. Rekurzió Egy objektum definícióját rekurzívnak nevezünk, ha a definíció tartalmazza a definiálandó objektumot. Egy P eljárást (vagy függvényt) rekurzívnak nevezünk, ha P utasításrészében előfordul magának

Részletesebben

Automaták mint elfogadók (akceptorok)

Automaták mint elfogadók (akceptorok) Automaták mint elfogadók (akceptorok) Ha egy iniciális Moore-automatában a kimenőjelek halmaza csupán kételemű: {elfogadom, nem fogadom el}, és az utolsó kimenőjel dönti el azt a kérdést, hogy elfogadható-e

Részletesebben

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem } Funkcionális és logikai programozás { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem } http://www.ms.sapientia.ro/~mgyongyi ` 1 Jelenlét: Követelmények, osztályozás Az első 4 előadáson

Részletesebben

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány

Részletesebben

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK 30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá

Részletesebben

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás 4.11. A C előfeldolgozó rendszer A fordítás első lépése a C esetében a különböző nyelvi kiterjesztések feldolgozása: másik állomány tartalmának

Részletesebben

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix

Részletesebben

A programozás alapjai 1 Rekurzió

A programozás alapjai 1 Rekurzió A programozás alapjai Rekurzió. előadás Híradástechnikai Tanszék - preorder (gyökér bal gyerek jobb gyerek) mentés - visszaállítás - inorder (bal gyerek gyökér jobb gyerek) rendezés 4 5 6 4 6 7 5 7 - posztorder

Részletesebben

A TANTÁRGY ADATLAPJA

A TANTÁRGY ADATLAPJA A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika Kar 1.3 Intézet Magyar Matematika és Informatika Intézet 1.4

Részletesebben

FUNKCIONÁLIS PROGRAMOZÁS

FUNKCIONÁLIS PROGRAMOZÁS FUNKCIONÁLIS PROGRAMOZÁS A funkcionális programozás néhány jellemzője Funkcionális programozás 1-2 Funkcionális, más néven applikatív programozás Funkcionális = függvényalapú, függvényközpontú Applikatív

Részletesebben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér Funkcionális programozás 2. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? Követelmények, osztályozás Programozási

Részletesebben

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar Formális szemantika Kifejezések szemantikája Horpácsi Dániel ELTE Informatikai Kar 2016-2017-2 Az előadás témája Egyszerű kifejezések formális szemantikája Az első lépés a programozási nyelvek szemantikájának

Részletesebben

Algoritmizálás + kódolás C++ nyelven és Pascalban

Algoritmizálás + kódolás C++ nyelven és Pascalban Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban

Részletesebben

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet

Részletesebben

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1] Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.

Részletesebben

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból

Részletesebben

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása 1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június

Részletesebben

Programozási nyelvek (ADA)

Programozási nyelvek (ADA) Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú

Részletesebben

Fibonacci számok. Dinamikus programozással

Fibonacci számok. Dinamikus programozással Fibonacci számok Fibonacci 1202-ben vetette fel a kérdést: hány nyúlpár születik n év múlva, ha feltételezzük, hogy az első hónapban csak egyetlen újszülött nyúl-pár van; minden nyúlpár, amikor szaporodik

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva! A PL/SQL alapelemei Karakterkészlet Az angol ABC kis- és nagybetűi: a-z, A-Z Számjegyek: 0-9 Egyéb karakterek: ( ) + - * / < > =! ~ ^ ; :. ' @ %, " # $ & _ { }? [ ] Szóköz, tabulátor, kocsivissza A kis-

Részletesebben

Programozás alapjai II. (7. ea) C++

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Felvételi tematika INFORMATIKA

Felvételi tematika INFORMATIKA Felvételi tematika INFORMATIKA 2016 FEJEZETEK 1. Természetes számok feldolgozása számjegyenként. 2. Számsorozatok feldolgozása elemenként. Egydimenziós tömbök. 3. Mátrixok feldolgozása elemenként/soronként/oszloponként.

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Python Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása alatt

Részletesebben

Flex tutorial. Dévai Gergely

Flex tutorial. Dévai Gergely Flex tutorial Dévai Gergely A Flex (Fast Lexical Analyser) egy lexikáliselemz -generátor: reguláris kifejezések sorozatából egy C/C++ programot generál, ami szövegfájlokat képes lexikai elemek sorozatára

Részletesebben

Komputeralgebra Rendszerek

Komputeralgebra Rendszerek Komputeralgebra Rendszerek Konstansok, változók, típusok Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék 2015. február 24. TARTALOMJEGYZÉK 1 of 110 TARTALOMJEGYZÉK I 1 TARTALOMJEGYZÉK 2 Nevek kezelése

Részletesebben

Fordító Optimalizálás

Fordító Optimalizálás Fordító Optimalizálás Kód visszafejtés. Izsó Tamás 2013. október 9. Izsó Tamás Fordítás Optimalizálás / 1 Section 1 Fordító részei Izsó Tamás Fordítás Optimalizálás / 2 Irodalom Fordító részei Optimalizálás

Részletesebben

Máté: Assembly programozás

Máté: Assembly programozás Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.: PL macro p1,p2 mov ax,p1 P2 p1 PL mov INC Adat, INC ax,adat Adat A &, %,! karakterek továbbá a és ;; speciális szerepet

Részletesebben

Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz.

Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz. Szemantikai elemzés A szintaktikai elemzés meghatározta az elemzend szöveg szintaxisfáját. szintaxisfa pontjaihoz olyan attribútumokat rendelünk, amelyek leírják az adott pont tulajdonságait. Ezeknek az

Részletesebben