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

Hasonló dokumentumok
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.

Flex tutorial. Dévai Gergely

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

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

Bevezetés a programozásba I.

Bevezetés a programozásba I.

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:

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

ZH feladatok megoldásai

3 A C programozási nyelv szintaktikai egységei

BASH SCRIPT SHELL JEGYZETEK

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

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

Automaták és formális nyelvek

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

Feladatok. 6. A CYK algoritmus segítségével döntsük el, hogy aabbcc eleme-e a G = {a, b, c}, {S, A, B, C}, P, S nyelvtan által generált nyelvnek!

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

Programozás I gyakorlat

A C# programozási nyelv alapjai

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Készítette: Nagy Tibor István

Bevezetés a programozásba I.

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

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

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

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Bevezetés az informatikába

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:

S z á m í t ó g é p e s a l a p i s m e r e t e k

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

1. Jelölje meg az összes igaz állítást a következők közül!

Operációs Rendszerek II. labor. 2. alkalom

Chomsky-féle hierarchia

Példatár a bevezetés a Matlab programozásába tárgyhoz

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

I. Specifikáció készítés. II. Algoritmus készítés

Aritmetikai kifejezések lengyelformára hozása

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

AWK programozás Bevezetés

Formális nyelvek és automaták

1. Alapok. #!/bin/bash

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

Gyakorló feladatok Gyakorló feladatok

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

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

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

Programozás I gyakorlat

Kiterjesztések sek szemantikája

Teljes visszalépéses elemzés

Atomataelmélet: A Rabin Scott-automata

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

Programozás I gyakorlat

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 helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Java II. I A Java programozási nyelv alapelemei

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

Java II. I A Java programozási nyelv alapelemei

Matematikai logika. 3. fejezet. Logikai m veletek, kvantorok 3-1

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

2018, Funkcionális programozás

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Komputeralgebra rendszerek

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

A matematika nyelvér l bevezetés

Komputeralgebra rendszerek

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

MintaFeladatok 2.ZH Megoldások

Komputeralgebra Rendszerek

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

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1.

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

Operációs rendszerek gyak.

Szkriptnyelvek. 1. UNIX shell

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Bevezetés a programozásba I.

Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant!

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

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.

FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK. LABORGYAKORLATOK

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

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

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

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

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Reguláris kifejezések 1.

Webprogramozás szakkör

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Informatika terméktervezőknek

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Programok értelmezése

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Chomsky-féle hierarchia

Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy:

Átírás:

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! (a) egész szám (legalább egy számjegy 0-9-ig) (b) olyan egész szám, amely több számjegy esetén nem kezd dhet nullával (c) el jeles egész szám (opcionális + vagy - az elején) (d) törtszám (tizedespont el tt legalább egy számjegy) 2. Add meg reguláris kifejezéssel és véges determinisztikus automatával a következ lexikális elemeket! (a) azonosító (bet vel kezd dik, számmal vagy bet vel vagy _ jellel folytatódik) (b) egysoros megjegyzés //-t l a sor végéig (c) többsoros megjegyzés /*-tól */-ig (d) sztring "alma" "a \" egy idéz jel a sztringben" "a \\ egy backslash a sztringben" backslash után csak idéz jel vagy backslash állhat (e) fehér szóközök (legalább egy space, tab vagy sorvége) 3. Rajzold fel a lexikális elemz véges determinisztikus automatáját, ha a következ szimbólumokat szeretnénk felismerni: ++ += -- -= -> >= >> >>= <<= 4. A következ kben az ábécé a {a, b} halmaz. (a) Ha a változók egybet sek, ab és aba kulcsszavak, milyen lexikális elemekre kell felbontani az abab szöveget? (b) Ha a változók egybet sek, aa, ab és aba kulcsszavak, milyen lexikális elemekre kell felbontani az aabaa szöveget? (c) Hogyan kell ezt lexikális elemz generátor (pl. ex ) segítségével implementálni? 5. Készíts programot a + ++ += és - szimbólumok felismeréséhez (lexikális elemz generátor használata nélkül)! (a) Készísd el az egyetlen szimbólum felismerésére képes automata implementációját! (b) Fejleszd tovább a programot egy teljes lexikális elemz vé, ami több egymást követ szimbólumot is képes felismerni! 6. Lexikális elemz generátor (pl. ex ) segítségével készíts programot az alábbi feladatokra! (a) a teljes bemenetet a kimenetre másolni 1

(b) a szövegben a username szót a saját felhasználói nevedre cserélni (c) programkód HTML konverter tab sorvége <BR> < < > > (d) minden sor végén kiírni a sor számát és hosszát (e) minden szóhoz kiírni a pozícióját (sor, oszlop) és magát a szót 7. Egy nyelvben a begin és az end kulcsszavak, a változók bet kb l és számjegyekb l állnak, de csak bet vel kezd dhetnek, a számkonstansok pedig számjegyekb l állhatnak. A fehér szóközök szóközökb l, tabokból és sorvégékb l állhatnak. (a) Milyen lexikális elemekre bontja ennek a nyelvnek a lexikális elemz je az alábbi szöveget? alma123 beginend begin 12 (b) Ha ezt az elemz t ex segítségével írjuk, milyen sorrendben kell megadni az egyes lexikális elemek reguláris kifejezéseit? 8. Egyes programozási nyelvekben a hexadecimális (16-os számrendszerben ábrázolt számok) a következ alakúak: a számjegyeik: 0, 1,..., 9, A, B,..., F a szám nem kezd dhet bet vel (A, B,..., F ) a szám végén a h karakter áll Példák helyes hexadecimális számokra: 12AF h 123h 0h 0DEh Példák helytelen hexadecimális számokra: DEh D1h h 0hh 123 (a) Írd fel az ilyen hexadecimális számokat leíró reguláris kifejezést! (b) Rajzold fel az ilyen hexadecimális számokat felismer véges determinisztikus automatát! (c) Sorszámozd az automata állapotait! Írd fel azt az állapotsorozatot, amin az automata keresztülmegy, miközben a 0DEh számot felismeri! 9. Egy nyelvben a változók bet kb l és számjegyekb l állnak, és felkijáltójellel kell kezd dniük. A számkonstansok számjegyekb l, a fehér szóközök pedig szóközökb l, tabokból és sorvégékb l állhatnak. A nyelvben értékadás és elágazás van az alábbi példaprogram szerint:!x1 := 5 ha!x1 paros akkor!2y := 4 ha!2y paratlan akkor!x1 := 2 Az elágazás feltétele csak párosságot és páratlanságot tud vizsgálni, az elágazás belsejében pontosan egy értékadás lehet. (a) Határozd meg a nyelv lexikális elemeit és írd le ket reguláris kifejezéssel! (b) Milyen sorrendben kell ezeket megadni ex -ben és miért így? (c) Készíts a változóneveket felismer véges determinisztikus automatát! 10. Készíts reguláris kifejezéseket és véges determinisztikus automatákat az alábbi lexikális elemekhez! (a) a, b és c bet kb l és pontokból álló nem üres sorozat (b) a, b és c bet kb l és pontokból álló nem üres sorozat, amely nem kezd dhet és nem végz dhet ponttal és két pont nem állhat egymás mellett 2

(c) a, b és c bet kb l és pontokból álló tetsz leges sorozat, amelyben az egymás mellett álló bet knek ábécé-sorrendben kell lennie példák helyes elemekre: ɛ... a b.a..aabcc.bc példák helytelen elemekre: ba.c.ba. 11. Egy nyelv kulcsszavai legyenek abba és abc, változónevei pedig a 10. feladat (c) pontjának megfelel lexikális elemek. (a) Milyen sorrendben kell feltüntetni ezeket a reguláris kifejezéseket Flex-ben? (b) Milyen lexikális elemekre bontja az elemz az alábbi szövegeket? abbaabc abbaabc..abba.abc 2 LL elemzések 1. Döntsd el, hogy az alábbi nyelvtanok közül melyik egyszer LL(1)-es! (a) S asa A A ba a (b) S asa ba A ɛ ba (c) S asa ba A a Amelyik igen, ahhoz készítsd el az elemz táblázatot és elemezd az alábbi szövegeket! aabaaa aabbaa aabaa 2. Döntsd el, hogy az alábbi nyelvtanok közül melyik ɛ-mentes LL(1)-es! (a) S asa A A ba a (b) S SA Bc A aa c B b A (c) S dsds A eb A a BA B b c Amelyik igen, ahhoz készítsd el az elemz táblázatot! Válassz egy olyan szöveget, amelynek levezetéséhez mindegyik szabályt pontosan egyszer kell felhasználni és elemezd! 3. Milyen mondatai vannak az alábbi grammatika által deniált nyelvnek? S [A] A ɛ nb B ɛ, nb Mutasd meg, hogy ez egy LL(1) nyelvtan, készítsd el az elemz táblázatot, és elemezz egy 5 szimbólumból álló mondatot. (Hány 5 szimbólumból álló mondat van a nyelvben?) 4. Elemz t szeretnénk készíteni egy nyelvhez, aminek egy példaprogramja: 3

if?a1 then?a1 := false endif while?a3 do?a3 :=?a2?a2 :=?a1 done A nyelvben minden változó? jellel kezd dik, deklarálni nem kell ket, mindegyik logikai típusú ( true, false). A nyelvben van értékadás, elágazás és ciklus. Az értékadás baloldalán változó, jobboldalán változó, true vagy false állhat. A ciklusok és elágazások feltétele mindig egyetlen változó. Az egész program és a ciklusok, elágazások törzse is lehet üres. (a) Határozd meg a lexikális elemeket és írj hozzájuk reguláris kifejezéseket! (b) Írd fel a nyelvtan szabályait! (c) Ellen rizd, hogy LL(1)-e a nyelvtan! (d) Készíts hozzá rekurzív leszállásos elemz t! 5. C++ függvénydeklarációt szeretnénk szintaktikus elemz vel elemezni. A lexikális elemek legyenek: a ( ), ; A nyelvtan szabályai pedig: S aa(l); L ɛ aaf F ɛ,aaf (a) Igaz-e, hogy a grammatika egyszer LL(1), ɛ-mentes LL(1), általános LL(1)? (b) Készítsd el hozzá az elemz táblázatot és elemezd az aa(aa,aa); szöveget! (c) Milyen eljárás tartozik a nyelvtan rekurzív leszállásos elemz jében az L nemterminális szimbólumhoz? 6. Készíts elemz t a 9. feladatban adott nyelvhez! (a) Írd fel a nyelv nyelvtanát! (b) Készíts LL elemz t a nyelvtanhoz! (c) Elemezd a ha 2 paros akkor!x := 0 mondatot! Írd fel hozzá a lexikális elemz kimenetét! Elemezd az elemz táblázat segítségével! 7. Egy olyan programozási nyelvhez szeretnénk szintaktikus elemz t írni, amelyikben három lexikális elem van: begin, end és skip. A nyelv szintaxisát a következ nyelvtan adja meg: S skip BS B begin S end (a) Igaz-e, hogy a grammatika egyszer LL(1), ɛ-mentes LL(1), általános LL(1)? (b) Készítsd el hozzá az elemz táblázatot és elemezd a begin skip end skip szöveget! 3. LR elemzések 1. Írj fel nyelvtanokat az alábbi nyelvi elemek szintaxisának leírásához! Elemz generátor (pl. bisonc++) segítségével készíts hozzájuk szintaktikus elemz programokat! (a) Lista [ alma, körte, szilva ] 4

Terminális szimbólumok: nyitó- és csukó zárójel, vessz, listaelem (b) C stílusú függénydeklarációk sorozata char betuje( string s, int index ); int osszeg( int x, int y ); Terminlális szimbólumok: azonosító, nyitó- és csukó zárójel, vessz (A típusok, függvények és paraméterek neve egyaránt azonosító.) (c) Blokkstrukturált nyelv skip utasítással. begin skip begin end end begin begin skip end skip skip skip end Terminális szimbólumok: begin, end és skip (d) A nulladrend logika nyelve (a <-> b) -> (!a b) & true Terminális szimbólumok: true, false, változónév, nyitó- és csukó zárójelek, továbbá az öt logikai összeköt jel a precedencia szerint csökken sorrendben: negáció, konjunkció, diszjunkció, implikáció, ekvivalencia 2. Adott az alábbi nyelvtan: S x AS A a S b (a) Alakítsd át kiegészített nyelvtanná! (b) Számold ki az LR(0) kanonikus halmazait! (c) Rajzold fel az elemz automatáját és töltsd ki az elemz táblázatot! (d) Elemezd az axbx szöveget! 3. Adott a következ nyelvtan: S ɛ skip S BS B begin S end (a) Mutasd meg, hogy a nyelvtan nem LR(0)! Milyen koniktusok vannak az LR(0) elemz táblázatában? (b) Igaz-e, hogy a nyelvtan SLR(1)? Számold ki a szükséges FOLLOW halmazokat és töltsd ki az SLR(1) elemz táblázatot! (c) Elemezd a skip begin begin end szöveget és gyeld meg, hol jön rá az elemz a hibára! 4. Adott a következ nyelvtan: S id id +S (a) Mutasd meg, hogy a nyelvtan nem LR(0)! Milyen koniktusok vannak az LR(0) elemz táblázatában? (b) Igaz-e, hogy a nyelvtan SLR(1)? Számold ki a szükséges FOLLOW halmazokat és töltsd ki az SLR(1) elemz táblázatot! (c) Elemezd az id + + id szöveget és gyeld meg, hol jön rá az elemz a hibára! 5. Adott a következ nyelvtan: S B = J J B * J id J B 5

(a) Mutasd meg, hogy a nyelvtan nem SLR(1)! (b) Igaz-e, hogy a nyelvtan LR(1)? (c) Készítsd el az LR(1) elemz táblázatot és elemezd az id=*id szöveget! 6. Készíts LALR(1) elemz t az alábbi nyelvtanhoz! S x y S y 7. Adott a következ nyelvtan: S Ab ac dac A a aa (a) Számítsd ki az LR(0) kanonikus halmazokat! (b) Add meg az összes nemterminálishoz a FOLLOW 1 halmazaikat! (c) Az el z ek segítségével töltsd ki az SLR(1) elemz táblázatot! Jelöld a táblázatban a koniktusokat! (d) Számítsd ki az LR(1) kanonikus halmazokat! (e) Melyek az összevonható halmazok? (f) Töltsd ki az LALR(1) elemz táblázatot! (g) Elemezd az ab mondatot! 4 Assembly programozás 1. Deniálj olyan adatterületet, ami az X és Y címkékt l kezdve 4-4 bájton a 10 és 5 értékeket tárolja, és a Z címkét l kezdve 4 bájtot lefoglal kezdeti érték nélkül. Írj olyan asszembly kódrészletet, ami megnöveli az X címkét l kezd d 4 bájt értékét átmásolja az Y-tól kezd d 4 bájtot az X-t l kezd d 4 bájtba kiszámolja a szorzatukat a Z-t l kezd d 4 bájtba bitenként összeéseli ket és az eredményt a Z-t l kezd d 4 bájtba teszi 2. Írj olyan kódrészletet, ami az abszolút értékét számolja ki eax értékének! 3. Írj olyan kódrészletet, ami bekér két számot és a másodikat kiírja annyiszor, amennyi az els értéke. 4. Írj olyan kódrészletet, ami kiszámolja két pozitív szám legnagyobb közös osztóját! 5. Írj programot, ami egészeket olvas be, tárolja ket tömbben tömbben, majd kiírja a tömb tartalmát. 6. Írj programot, ami tömbben tárolt számokat összegez. 7. Írj programot, ami egy karaktertömbben megszámolja az 'a' karaktereket. 8. Írj programot, ami egészek tömbjében megkeresi a legnagyobb számot. 9. Írj programot, ami bekér egy nemnegatív egész számot, majd átalakítja szöveggé (10-es számrendszer szerint). Az eredményt egy karaktertömbbe kell írni majd kiírni a képerny re. 6

5 Kódgenerálás 1. Írd fel a szimbólumtábla tartalmát (változó neve, típusa, címkéje) majd rögzített kódgenerálási szabályok alapján add meg a generált assembly kódot az alábbi kódrészlethez: int x; int y; x = 2*x+y; 2. Rögzített kódgenerálási szabályok alapján add meg a generált assembly kódot az alábbi kódrészlethez: while(x < 10) if( b ) x = x+1; else x = 10; 7