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.
|
|
- Amanda Hajdu
- 8 évvel ezelőtt
- Látták:
Á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 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észletesebbenEmlé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észletesebbenA 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észletesebbenAutomatá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észletesebbenFordí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észletesebbenA 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észletesebbenInformatika 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észletesebbenA 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észletesebbensallang 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észletesebbenChomsky-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észletesebbenSegé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észletesebbenA 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észletesebben2018, 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észletesebbenA 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észletesebbenMemó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észletesebbenKiterjeszté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észletesebbenAritmetikai 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észletesebbenAWK 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észletesebbenProgramozá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észletesebbenA 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észletesebbenKifejezé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észletesebbenFordí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észletesebbenRekurzió. 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észletesebbenFordí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észletesebbenZH 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észletesebbenJava 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észletesebbenJava 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észletesebbenFordí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észletesebbenFordí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észletesebbenAdatbá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észletesebbenAlgoritmizá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észletesebbenProgramozá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észletesebbenTá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észletesebbenAWK 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észletesebbenKifejezé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észletesebbenBASH 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észletesebbenFormá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észletesebbenBASH 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észletesebbenBABEŞ 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észletesebbenA 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észletesebbenBisonc++ 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észletesebbenProgramok é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észletesebbenHá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észletesebbenFordí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észletesebbenAWK 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észletesebbenCsima 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észletesebbenAdatszerkezetek 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észletesebbenVé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észletesebbenAdatszerkezetek 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észletesebbenAdatszerkezetek é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észletesebbenChomsky-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észletesebbenFormá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észletesebbenOperá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észletesebbenHá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észletesebbenFormá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észletesebbenAdatszerkezetek 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észletesebbenTeljes 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észletesebbenKomputeralgebra 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észletesebbenKomputeralgebra 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észletesebbenSzkriptnyelvek. 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észletesebbenBró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észletesebbenA 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észletesebbenAbsztrakt 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észletesebbenAmortizá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észletesebbenBevezeté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észletesebbenJava 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észletesebbenKriptográ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észletesebben2. 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észletesebbenAutomatá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észletesebbenFunkcioná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észletesebbenA 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észletesebben30. 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észletesebbenJá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észletesebbenObjektum 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észletesebbenA 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észletesebbenA 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észletesebbenFUNKCIONÁ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észletesebbenTö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észletesebben2019, 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észletesebbenFormá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észletesebbenAlgoritmizá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észletesebbenProgramozá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észletesebbenSpeciá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észletesebbenKupac 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észletesebbenAdatszerkezetek 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észletesebbenInformá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észletesebbenProgramozá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észletesebbenAdatszerkezetek é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észletesebbenFibonacci 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észletesebbenKOVÁ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észletesebbenStruktú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észletesebbenKarakterké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észletesebbenProgramozá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észletesebbenFelvé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észletesebbenVá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észletesebbenFlex 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észletesebbenKomputeralgebra 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észletesebbenFordí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észletesebbenMá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észletesebbenSzemantikai 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