Szöveges domain- specifikus nyelvek. Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

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

Modellező eszközök, kódgenerálás

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

Modellek végrehajtása, kódgenerálás

Transzformációk integrált alkalmazása a modellvezérelt szoftverfejlesztésben. Ráth István

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

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

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Automaták és formális nyelvek

Fordítóelmélet bevezetés

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:

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.

Az informatika kulcsfogalmai

Tudásalapú információ-kereső rendszerek elemzése és kifejlesztése

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

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

Digitális technika VIMIAA01 9. hét

Komputeralgebra rendszerek

Metamodellezés. Simon Balázs BME IIT, 2011.

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

Komputeralgebra rendszerek

Szoftver karbantartási lépések ellenőrzése

ZH feladatok megoldásai

Automatikus tesztgenerálás modell ellenőrző segítségével

Modell alapú tesztelés mobil környezetben

Valószínűségi modellellenőrzés Markov döntési folyamatokkal

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

A Számítástudomány alapjai

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:

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

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

Már megismert fogalmak áttekintése

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

C programozási nyelv

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Dokumentumformátumok Jelölő nyelvek XML XML. Sass Bálint Bevezetés a nyelvtechnológiába 2. gyakorlat szeptember 20.

Komponens alapú programozás Bevezetés

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

Verifikáció és validáció Általános bevezető

Közösség, projektek, IDE

Utolsó módosítás:

A CMMI alapú szoftverfejlesztési folyamat

Atomataelmélet: A Rabin Scott-automata

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

XCZ állományok ellenőrzése, átadása elektronikus beküldésre és közvetlen beküldése parancssori funkcióval az ÁNYK programban

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

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

Programozási alapismeretek 1. előadás

Szoftver-modellellenőrzés absztrakciós módszerekkel

Automaták mint elfogadók (akceptorok)

Podoski Péter és Zabb László

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

Rekurzió. Dr. Iványi Péter

Programzás I gyakorlat

Flex tutorial. Dévai Gergely

Szolgáltatásintegráció (VIMIM234) tárgy bevezető

Programozás alapjai Bevezetés

Csempe átíró nyelvtanok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Operációs rendszerek. 10. gyakorlat. AWK - bevezetés UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

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

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként.

Nagy Gábor compalg.inf.elte.hu/ nagy

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

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

A Java EE 5 plattform

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

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

Hatékony iteratív fejlesztési módszertan a gyakorlatban a RUP fejlesztési módszertanra építve

Logika és számításelmélet. 10. előadás

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Logika es sz am ıt aselm elet I. r esz Logika Harmadik el oad as 1/33

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Nyilvántartási Rendszer

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

Chomsky-féle hierarchia

UML (Unified Modelling Language)

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

Digitális technika (VIMIAA02) Laboratórium 3

Komputeralgebra Rendszerek

Digitális technika (VIMIAA02) Laboratórium 3

Pénzügyi algoritmusok

Haladó Fordítóprogramok

C#, OOP. Osztályok tervezése C#-ban

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

6. előadás A reguláris nyelvek jellemzése 2.

Részletes szoftver tervek ellenőrzése

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Interfészek. PPT 2007/2008 tavasz.

Chomsky-féle hierarchia

38. A gráfalgoritmusok alkalmazása

Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

AWK programozás Bevezetés

Specifikáció alapú teszttervezési módszerek

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Átírás:

Szöveges domain- specifikus nyelvek Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Eddig o Metamodellek o Grafikus szerkesztők o Kódgenerálás Összegzés

Grafikus szerkesztők Átlátható, olvasható Nehézkes szerkesztés Nagyobb (20+ elem) modellek kezelése

Nagyobb modell Forrás: hnp://epress.anu.edu.au/cs/html/ch12s04.html

Grafikus szerkesztők Átlátható, olvasható Nehézkes szerkesztés Nagyobb (20+ elem) modellek kezelése HelyeNük: Szöveges nyelvek

Szerkesztők szöveges nyelvekhez Első körben o Ablak, amibe szöveget írunk o +támogató funkciók

Támogatás szintjei

Támogatás szintjei Egyszerű szövegszerkesztő o Példa: JegyzeNömb o Alapműveletek (vágólapkezelés, keresés/csere, stb.) o Eclipse környezetben implementálva Programozói szövegszerkesztő o Példa: Notepad++, Emacs, Vim, o Nyelvspecifikus szolgáltatások (forráskód színezés, ) Integrált szövegszerkesztő o Példa: Eclipse JDT, Visual Studio o ÖsszeteN szolgáltatások (projekt támogatás, autocomplete, dokumentáció, )

Támogatás szintjei Egyszerű szövegszerkesztő o Példa: JegyzeNömb o Alapműveletek (vágólapkezelés, keresés/csere, stb.) o Eclipse környezetben implementálva Programozói szövegszerkesztő o Példa: Notepad++, Emacs, Vim, o Nyelvspecifikus szolgáltatások (forráskód színezés, ) Integrált szövegszerkesztő o Példa: Eclipse JDT, Visual Studio o ÖsszeteN szolgáltatások (projekt támogatás, autocomplete, dokumentáció, )

Támogatás szintjei Egyszerű szövegszerkesztő o Példa: JegyzeNömb o Alapműveletek (vágólapkezelés, keresés/csere, stb.) o Eclipse környezetben implementálva Programozói szövegszerkesztő o Példa: Notepad++, Emacs, Vim, o Nyelvspecifikus szolgáltatások (forráskód színezés, ) Integrált szövegszerkesztő o Példa: Eclipse JDT, Visual Studio o ÖsszeteN szolgáltatások (projekt támogatás, autocomplete, dokumentáció, )

JDT szolgáltatások

Szerkesztő forráskód színezéssel JDT szolgáltatások

JDT szolgáltatások Fájl ánekintő nézete

JDT szolgáltatások Projektstruktúra kezelése és megjelenítése

JDT szolgáltatások Hibák összegyűjtése

JDT szolgáltatások: Hibajelzés és javítás

JDT szolgáltatások: Dokumentáció

JDT szolgáltatások: Occurrence marker

JDT szolgáltatások: Content assist

JDT szolgáltatások Struktúra ánekintéséhez nézetek Navigációs linkek Varázslók Refactoring Inkrementális builder FuNatás/debug támogatás Bővíthetőség!

Összegzés Integrált szerkesztők szöveges nyelvekhez o Sokféle hasznos funkcionalitás Ebben a blokkban o Szerkesztők Beolvasás, kiírás Dokumentum modell o Előző alkalommal Builder Projektek

Szöveges editorok Eclipse alae

Architektúra Egyszerű szövegszerkesztő

Architektúra Egyszerű szövegszerkesztő Szerkesztő Szerkesztő Kiírás Beolvasás Kiírás Beolvasás Fájl Fájl

Architektúra Egyszerű szövegszerkesztő Szerkesztő Szerkesztő Kiírás Beolvasás Kiírás Beolvasás Hivatkozás? Fájl Fájl

Architektúra Dokumentum modell (MVC architektúra) Szerkesztő Szerkesztő Dokumentum modell Dokumentum modell Elemző Elemző Kiírás Beolvasás Kiírás Beolvasás Fájl Fájl

Architektúra Dokumentum modell (MVC architektúra) Szerkesztő Szerkesztő Dokumentum modell Hivatkozás Dokumentum modell Elemző Elemző Kiírás Beolvasás Kiírás Beolvasás Fájl Fájl

Dokumentum modell Objektum reprezentáció a forrásfájlhoz Mire használjuk? o Hivatkozások követése Fájlon belül Fájlok közön o Editor szolgáltatások erre épülnek Content assist Outline

Felépítés o Szöveg tördelése o Absztrakt szintaxis Dokumentum modell Szoros kapcsolat nyers szöveggel Azonosítható a szövegszakaszok Előállítás o Elemzőkkel

Részletesség o Teljes részletesség Dokumentum modell 1:1 megfeleltetés modell és fájl tartalma közön Megvalósítás AST AST hivatkozáskövetéssel o ÁNekintő szint A modell kevésbé részletes, mint a fájl Cél: több fájl tartalmának együnes ánekintése

Példa: JDT dokumentum modell Java Object Model o Osztályok o Metódusok o ANribútumok o Java projektekre AST (file1.java) AST (file2.java) AST o Teljes részletesség o Lusta felépítés Java Object Model

Dokumentum modell előállítása Nyelvspecifikus elemző segítségével o Beolvasás o Részekre bontás o Hivatkozás feloldás o AST/Dokumentum modell építés Hibakezelés! Később részletesebben

Jelölők (markerek) Jelölők o Plajorm támogatás információk hozzárendelésére Fajtái o Error marker o Bookmark o Task marker o o Egyedi jelölők

Jelölők Visszajelzés o Elemzők o Analízis o Felhasználói Szabad adatszerkezet o Kulcs- érték párok o Megjelenítés nincs definiálva! o Nézetek Problems view Bookmarks Tasks

Fájlokhoz rendelve Jelölők o Ill. workspace erőforrásokhoz Tipikus értékek o Sorszám/terület o Hiba esetén súlyosság o Üzenet

Problem markers

Automamkus javítás Hibajelölőkhöz javítás kapcsolható o Lehetséges módosítás(ok) o Cél: probléma javítása o Modell szintjén prakmkus elvégezni

Dokumentum modell felhasználása Content Assist o Milyen elemek vannak már definiálva? o Modellspecifikus szűrés Outline készítés o Egyszerű szűrése a dokumentum modellnek Hivatkozások követése o Occurrence marking o Navigáció

Dokumentum modell felhasználása Refactoring o Modell szintjén célszerű elvégezni Könnyebb értelmezni a változtatásokat o Modell támogatja a visszaírást PreNy prinmng o Modell kiírása o Tördelés

Szöveges nyelvek szerkesztése

Szöveges nyelvek feldolgozása Természetes nyelvek XML feldolgozás Nyelvtan alapú feldolgozás o Kézzel kódolt elemző o Reguláris kifejezések o Generált elemző

Természetes nyelvek feldolgozása Általánosan nehéz o Kontextus- információk o Nem (jól) definiált szemanmka

Környezet Forrás: hnp://specgram.com/cliii.4/08.phlogiston.cartoon.zhe.html

XML feldolgozás XML: szabványos szöveges szintaxis Sémák definiálhatóak o Kb. metamodell Jó tooling o Többféle beolvasási technika o Validáció

Problémák az XML használatával Nehéz írni o Lezáró címkék o Enmtások (pl. > ) Nehéz olvasni o Szigorú fastruktúra o Hivatkozásfeloldás nem automamkus

Reguláris kifejezések Mintaillesztés karakterláncokban o Jó támogatás Legtöbb programozási nyelven Nagyjából közös szintaxis o Illeszkedés számítás/visszaadás Felhasználható szöveg elemzésére?

RegExp: Email validáció (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r \n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?: [^()<>@,;:\\".\[\] \000- \0 31]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\ ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+ (?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?: (?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;: \\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\ r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\ [\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?: (?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\ \".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?: \r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031 ]+(?:(?: (?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(? :(?:(?:\r\n)?[ \t])+ \Z (?=[\ ["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*) (?:[^()<>@,;:\\".\[\] \000- \031]+(?:(? :(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^ \"\r\\] \\. (?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \ \. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) " (?:[^\"\r\\] \\. (?:(?:\r \n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)? [ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[ \]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\ [\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; :\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([ ^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)? [ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\ ]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ [\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\ ["()<>@,;:\\".\[\]])) \[([^\[\]\ r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\] \r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 00- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, ;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(? :[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?: (?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\". \[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r \n)?[ \t])*(?:[ ^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\] ])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?: [^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\ \".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[ \["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t ])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))* (?: [^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\ ]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\[" ()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<> @,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r \n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@, ;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\ [\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? (?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r \n)?[ \t])+ \Z (?=[\["()<>@,;:\\". \[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\[ "()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t]) + \Z (?=[\ ["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\] \r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*) This regular expression will only validate addresses that have had any comments stripped and replaced with whitespace Forrás: hnp://www.ex- parrot.com/~pdw/mail- RFC822- Address.html

További probléma Kimenet egyetlen logikai változó o Illeszkedik- e vagy sem Mi hiányzik?

További probléma Kimenet egyetlen logikai változó o Illeszkedik- e vagy sem Mi hiányzik? Hibajelzés!

Some people, when confronted with a problem, think I know, I'll use regular expressions. Now they have two problems. Jamie Zawinski hnp://regex.info/blog/2006-09- 15/247

Nyelvek és nyelvtanok Formális nyelvek gyorstalpaló

Fogalmak Formális nyelv o Nyelv: lehetséges mondatok halmaza o Mondat: szimbólumok sorozata o Ábécé: lehetséges szimbólumok halmaza

Példa: Természetes számok

Példa: Természetes számok Ábécé: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Egyjegyű számok nyelve: o «0», «1», «2», «3», «4», «5», «6», «7», «8», «9» 15- nél kisebb páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14» Pozi v páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14», «16», «18», «20», «22», «24», «26», «28»,

Példa: Természetes számok Ábécé: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Egyjegyű számok nyelve: o «0», «1», «2», «3», «4», «5», «6», «7», «8», «9» 15- nél kisebb páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14» Pozi v páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14», «16», «18», «20», «22», «24», «26», «28»,

Példa: Természetes számok Ábécé: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Egyjegyű számok nyelve: o «0», «1», «2», «3», «4», «5», «6», «7», «8», «9» 15- nél kisebb páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14» Pozi v páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14», «16», «18», «20», «22», «24», «26», «28»,

Példa: Természetes számok Ábécé: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Egyjegyű számok nyelve: o «0», «1», «2», «3», «4», «5», «6», «7», «8», «9» 15- nél kisebb páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14» Pozi v páros számok nyelve: o «0», «2», «4», «6», «8», «10», «12», «14», «16», «18», «20», «22», «24», «26», «28»,

Elemek felsorolása Nyelvek megadása o Csak véges elemszám esetén működik o Ld. páros számok nyelve Véges algoritmus felhasználása o Lépések, melynek a kimenetei a nyelv mondatai

Nevek felsorolása: Példa: Nevek felsorolása o Neveket vesszővel válasszuk el; Kivéve az utolsót, on és legyen közben Pl.: Zoltán, István és Dániel o Ismétlődés megengeden Pl.: Zoltán, Zoltán és Dániel Forrás: Dick Grune, Ceriel J.H. Jacobs: Parsing Techniques

Példa: Nevek felsorolása

Algoritmus Példa: Nevek felsorolása 1 Dániel, István, Zoltán nevek 2 Egy név érvényes mondat 3 Egy mondat, amelyet vessző és egy név követ, értelmes mondat 4 Ha a befejezés előn a mondat, «név» alakú, cseréljük ki és «név» formájúra

Algoritmus Példa: Nevek felsorolása 1 Dániel, István, Zoltán nevek 2 Egy név érvényes mondat 3 Egy mondat, amelyet vessző és egy név követ, értelmes mondat 4 Ha a befejezés előn a mondat, «név» alakú, cseréljük ki és «név» formájúra «név» nem fog szerepelni a szövegben!

Kéjéle szimbólum Probléma megoldás o Megjelenhet a szövegben (ábécéhez tartozik) Terminális szimbólum o Nem jelenhet meg a szövegben Nem- terminális szimbólum Nem- terminálisok o Cserélhetőek más szimbólumokkal ( ) o Algoritmus vége Csak terminális szimbólum van Nem cserélhetünk

MódosítoN algoritmus o Ábécé Dániel, István, Zoltán, és,,, sorvége o Nem- terminális szimbólumok «Név», «Mondat» 1 Dániel «Név»; István «Név»; Zoltán «Név» 2 «Mondat» «Név» 3 «Mondat» «Mondat», «Név» 4 «Mondat» végén, «Név» és «Név» 5 Kiindulás: «Mondat»

MódosítoN algoritmus o Ábécé Dániel, István, Zoltán, és,,, sorvége o Nem- terminális szimbólumok «Név», «Mondat» 1 Dániel «Név»; István «Név»; Zoltán «Név» 2 «Mondat» «Név» 3 «Mondat» «Mondat», «Név» 4 «Mondat» végén, «Név» és «Név» 5 Kiindulás: «Mondat» Bonyolult elemzési szabály

Nyelvek osztályozása

Elemző bonyolult Nyelvek osztályozása o Nem is lehetséges minden nyelvtanhoz Nyelvtanok kategorizálhatóak o Chomsky- féle nyelvosztályok

Rekurzívan felsorolható nyelvek (Type 0) Korlátozás nélküli szabályok Általános elemzés lehetetlen o Eldönthetetlenségi problémák o Speciális esetek működhetnek

Környezejüggő nyelvek (Type 1) Kéjéle definíció o Környezejüggő αaβ αγβ α és β: kontextus A: nem- terminális γ: cserélendő érték o Monoton Szabály jobboldala nem rövidebb, mint a baloldal Szabály baloldala tartalmaz nem- terminálist

Környezejüggő nyelvek (Type 1) Kéjéle definíció o Környezejüggő αaβ αγβ α és β: kontextus A: nem- terminális γ: cserélendő érték o Monoton Az A nem- terminális kicserélhető γ- ra Szabály jobboldala nem rövidebb, mint a baloldal Szabály baloldala tartalmaz nem- terminálist

Elemzés Környezejüggő nyelvek (Type 1) o Monoton nyelvtanok Felsorolhatjuk az összes mondatot AdoN hosszig o Lassú, de eldönthető

Környezejüggetlen nyelvek (Type 2) Baloldal o A γ Egy darab nem- terminális Jobb oldal: terminális és nemterminálisok sorozata o Környezejüggő nyelv, de kontextus üres

Környezejüggetlen nyelvtanok (Type 2) Elemzés o Többféle megközelítés létezik o Jól ismert előnyök/hátrányok o Később részletesebben

Kéjéle szabály: o A α o A αb Reguláris nyelvek (Type 3) Kb. reguláris kifejezéseknek megfelelő o Implementációk valamivel többet engednek

Reguláris nyelvek (Type 3) Elemző: véges automata Egyszerű nyelvekre jó DE: o Beágyazás (nesmng) nem megy o Ez mpikus probléma elemzők esetén

Nyelvosztályok hierarchiája Genera v nyelvtanok Környezejüggő (CS) Környezejüggetlen (CF) Reguláris

Eddig: Nyelvek osztályozása o Nyelvtanok osztályozása Nyelv: o Lehetséges nyelvtanok szerint o Legszigorúbb osztálynak megfelelő nyelvtan

Példa: Nevek felsorolása o Ábécé Dániel, István, Zoltán, és,,, sorvége o Nem- terminális szimbólumok «Név», «Mondat» 1 Dániel «Név»; István «Név»; Zoltán «Név» 2 «Mondat» «Név» 3 «Mondat» «Mondat», «Név» 4 «Mondat» végén, «Név» és «Név» 5 Kiindulás: «Mondat»

Példa: Nevek felsorolása o Ábécé Dániel, István, Zoltán, és,,, sorvége o Nem- terminális szimbólumok «Név», «Mondat» 1 Dániel «Név»; István «Név»; Zoltán «Név» 4. szabály: 2 «Mondat» «Név» 0. nyelvosztály 3 «Mondat» «Mondat», «Név» 4 «Mondat» végén, «Név» és «Név» 5 Kiindulás: «Mondat»

Példa: CF nyelvtan a nevekhez o Ábécé Dániel, István, Zoltán, és,,, sorvége o Nem- terminális szimbólumok «Név», «Mondat», «Lista» «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név»

Railroad diagram

CF nyelvek elemzése

Nyelvtanok alkalmazása Szabályok alapján behelyenesítés Indeterminiszmkus választás o Elemzési algoritmusok leköthemk! Cél: o Szabályok sorozatával előállítani a bemenetet

Példa: Levezetés «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név» Mondatszerű forma Felhasznált szabály «Mondat»

Példa: Levezetés «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név» Mondatszerű forma Felhasznált szabály «Mondat» «Lista» és «Név» «Mondat» - >«Lista» és «Név»

Példa: Levezetés «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név» Mondatszerű forma Felhasznált szabály «Mondat» «Lista» és «Név» «Lista», «Név» és «Név» «Mondat» - >«Lista» és «Név» «Lista» - > «Lista», «Név»

Példa: Levezetés «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név» Mondatszerű forma Felhasznált szabály «Mondat» «Lista» és «Név» «Lista», «Név» és «Név» «Név», «Név» és «Név» «Mondat» - >«Lista» és «Név» «Lista» - > «Lista», «Név» «Lista» - > «Név»

Példa: Levezetés «Név»::= Zoltán István Dániel «Mondat»::= «Név» «Lista» és «Név» «Lista»::= «Lista», «Név» «Név» Mondatszerű forma Felhasznált szabály «Mondat» «Lista» és «Név» «Lista», «Név» és «Név» «Név», «Név» és «Név» «Mondat» - >«Lista» és «Név» «Lista» - > «Lista», «Név» «Lista» - > «Név» Zoltán, Zoltán és Zoltán

Levezetési fa Mondat Lista Név Lista Név Név Zoltán, Zoltán és Zoltán

Cél: Elemzés o Levezetési fa meghatározása o Miért kell a levezetési fa?

Hibajelzés Mondat Lista Név Lista Név Név Zoltán és Zoltán és Zoltán

Cél: Elemzés o Levezetési fa meghatározása o Miért kell a levezetési fa? Megközelítések o Nem irányíton módszerek (Non- directed methods) o IrányítoN módszerek (Directed methods) o Keresési technikák o Felülről lefelé o Alulról felfelé

Felülről lefelé elemzés Kiindulás: Mondatszimbólum Cél: szabályalkalmazásokkal eljutni a mondamg Elágazási lehetőségek o Predict and match o Backtracking szükség esetén

Tulajdonságok LL(k) elemzők o Le - to- right (balról jobbra olvasás) o Le most derivamon (baloldali levezetés) o k character look- ahead (előretekintés k karakterrel)

Baloldali levezetés Mondat (1) Lista (2) Név (6) Lista (3) Név (5) Név (4) Zoltán, Zoltán és Zoltán

Alulról felfelé elemzés o Kiindulás: Mondat o Cél: Eljutni a Mondatszimbólumig Szabály jobb oldalát illesztjük a szövegre o Illeszkedés esetén alkalmazhatjuk a szabályt o Visszafelé!

Tulajdonságok LR(k) elemzők o Le - to- right (balról jobbra olvasás) o Rightmost derivamon (jobboldali levezetés) o k character look- ahead

Jobboldali levezetés Mondat (1) Lista (3) Név (2) Lista (5) Név (4) Név (6) Zoltán, Zoltán és Zoltán

LL(k) LR(k) LR(k) CF Elemzők választása Ötletek o LL(k) Egyszerűbb algoritmus Könnyebben érthető a futás - > jobb hibajelzés o LR(k) Nagyobb kifejezőerő Kisebb memóriaigény

Elemzők a gyakorlatban

ÁNekintő Eddig o Nyelvtan o Elemző Mi hiányzik még?

Eddig o Nyelvtan o Elemző Mi hiányzik még? ÁNekintő o Bemenem karakterfolyam kezelés o Változók bevezetése o Magasabb szintű elemzések

Bemenet Mondat Lista Név Lista Név Név Zoltán, Zoltán és Zoltán

Tényleges bemenet: Lista Lista Bemenet Név Mondat 'Z' 'o' 'l' 't' 'á' 'n' ' ' ',' 'Z' 'o' 'l' 't' 'á' 'n' ' ' 'é' 's' ' ' 'Z' 'o' 'l' 't' 'á' 'n Név Név Zoltán, Zoltán és Zoltán

Bemenet kezelése

Bemenet: o Karakterfolyam Elemző bemenete Bemenet kezelése o Magasabb szintű tokenek «Név»,, vagy és o KeNő közö kapcsolat: lexer Miért hasznos ez az indirekció? o Hibakezelés o Teljesítmény o Probléma dekompozíció

Cél: Lexer o Karakterfolyam tokenizálás o Hasonlít elemzők problémájához De egyszerűbb mpikusan reguláris kifejezés Csak szavak/tokenek azonosítása (Kommentek elhagyása) o Egyszerűsím az elemző dolgát

Változók bevezetése a=3; System.out.println(a); Változó o Futási időben Érték behelyenesítés o Szerkesztési/elemzési időben Hivatkozás AST más részére

Változó kezelés Változó hivatkozás (variable reference) o Egy változó felhasználása Változó definíció (variable defini.on) o Egy változó megadása Egyedi név (jólformáltsági kényszer) o Változó definícióknak azonosíthatónak kell lennie o Külön fázis elemzés után

Elemző biztosítja Változó kezelés o Érvényes változónév- e (szintakmkailag) Feloldás ellenőrzi o Definíció létezése Hatókör probléma (scope) o Definíció egyedisége

Hatókör probléma!private int value;!!"!public void setvalue(int value) {!!!this.value = value;!!} Mire hivatkozik a value referencia?

Megoldás Hatókör probléma o Feloldó szintjén definiálandó Lehetséges megközelítések o Legspecifikusabb előfordulás o Hibajelzés konfliktus esetén o MinősíteN hivatkozások (qualified name) o

Elemzés menete Lexer Bemenet: Karakter folyam Kimenet: Token folyam Parser Bemenet: Token folyam Kimenet: AST Resolver Bemenet: AST Kimenet: AST + változó feloldás Tetszőleges egyéb ellenőrzés/elemzés Pl. type checking Analysis

Elemzők és szerkesztők

Elemzés fázisai és szerkesztő szolgáltatások Elemzés összetensége Syntax Coloring Outlining, Folding Content Assist Search Index Creamon Type Analysis Binding Analysis Syntacmc analysis (Parser) Lexical analysis (Lexer) Quick fix Eager Parsing Refactoring Refactoring- specific Analysis Flow Analysis Forrás: PIMP Your Eclipse: Building an IDE using IMP

Elemzés fázisai és szerkesztő szolgáltatások Sokféle szolgáltatás o Sokféle kapcsolódó elemzés o Összefüggenek Célok o Hibatűrés Használható hibajelzés! o Teljesítmény

Szolgáltatások I. Kódszínezés (Syntax Coloring) o Tokenekhez szín/formázás rendelhető Vázlat nézet (Outlining) o AST csomópontok bejárása Kódrészletek összehúzása (Folding) o AST csomópontok bejárása Felhasználás megjelenítése (Mark Occurences) o AST csomópontok + változófeloldás

Szolgáltatások II. Dokumentáció megjelenítése (Hover) o AST bejárás (feloldás után) o Kellhet lexer adat is (pl. Javadoc kommentek) Automamkus kiegészítés (Content Assist) o ÖsszeteN elemzések o Tipikusan HIBÁS szöveg/modell felen

Keresés (Search) Szolgáltatások III. o Index- alapú keresése bizonyos pusú AST csomópontoknak Automamkus javítás (Quick Fix) o Hibákhoz javítási lehetőségek keresése Refaktor (Refactoring) o Ekvivalens átalakítások (pl. átnevezés)

Megvalósítási lehetőségek I. Eclipse DocumentViewer API o JFace API mindent kézzel Eclipse IMP projekt o Univerzális editor koncepció o Szolgáltatások regisztrációja

Megvalósítási lehetőségek II. EMFText és Eclipse Xtext projektek o Nyelvtan + Metamodell alapján o EMF AST származtatás o Nagyon hasonló logika o Különböző célok részletesebben jövő héten