Semestrální práce implementuje univerzální tokenizer založený na stavovém automatu. Jsou implementovány následující automaty:



Podobné dokumenty
20. Projekt Domácí mediotéka

PREPROCESOR POKRAČOVÁNÍ

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY.

Konstruktory překladačů

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA


8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

Interpret jazyka IFJ2011


PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Pokročilé schopnosti OOP

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Vizuální programovací jazyk

Obr. 1 - Seznam smluv

EXTRAKT z české technické normy

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

Syntaxí řízený překlad

typová konverze typová inference

Implementace LL(1) překladů

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

HypEd4 Uživatelská příručka 2004 HYPEL

pt;font-style:normal;color:grey;font-family:verdana,geneva,kalimati,sans-serif;text-decoration:none;text-align:center;font-variant

SDI PRO OCHRANU PŘÍRODY: PŘÍSTUP PROJEKTU NATURE-SDIplus K HARMONIZACI DAT

awk programovatelný filtr

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

Úvod do PHP s přihlédnutím k MySQL

PRG036 Technologie XML

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

JavaScript 101. "Trocha života do statických stránek"

Quo vadis programování? Automatizace vyhodnocování studentských úloh

11. Dědičnost. Dědičnost strana 103

Obvody kontaktního řízení

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Informační a vzdělávací portál Jihomoravského kraje. VYTVÁŘENÍ DOKUMENTŮ Manuál tvorby dokumentů a pravidla pro zveřejňování příspěvků na portál

Aplikovaná informatika

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Hardwarová realizace konečných automatů

Studijní program ELEKTROTECHNIKA A INFORMATIKA

Zadání úlohy do projektu z předmětu IPP 2013/2014

OOPR_05. Případové studie

1 Nejkratší cesta grafem

Syntaxí řízený překlad

Programování v C++ 2, 4. cvičení

PB161 Programování v jazyce C++ Přednáška 4

Funkce, podmíněný příkaz if-else, příkaz cyklu for

knihovna programátora

Komunikační rozhraní SEP 1.6

1. Dědičnost a polymorfismus

Příklady pracovních postupů

Obrázky. Tag Význam Párový Výskyt. img obrázek ne. img video ne. map klikací mapa. area oblast v klikací mapě ne

5 Rekurze a zásobník. Rekurzivní volání metody

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Projektování montážních buněk

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

NÁVRH A REALIZACE WWW PREZENTACE ČKR

EXTRAKT z české technické normy

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Konečný automat. Jan Kybic.

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Generické programování

10. blok Logický návrh databáze

Program a životní cyklus programu

Uspořádaný seznam nula nebo více elementů, každý je typem ASN.1 (heterogenní seznam) uspořádaný seznam stejných elementů

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Lexikální analýza. Miroslav Beneš Dušan Kolář

Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze , uloženo čt :44 1z 55. Rozhraní. interface (interfejs)

Restaurator. Semestrání projekt předmětu PDA

Jazykové technologie. Karel Oliva Ústav pro jazyk český Akademie věd ČR

Nadstavba CAD S k i J o díl 2 - vybrané příkazy

Programování II. Polymorfismus

Ruby a webové aplikace 19.1 CGI programování v Ruby

Na základě Business Targets autora Simona Greenalla, vydaných nakladatelstvím Macmillan Heinemann English Language Teaching (Oxford).

PŘETĚŽOVÁNÍ OPERÁTORŮ

Objektově orientované technologie Dynamický náhled Stavový diagram. Pavel Děrgel, Daniela Ďuráková

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Modernizace dojírny pro kozy a ovce

Ruční návrh Připravíme si odpovědi na základní otázky Co chceme řešit (projektovat) a proč Komu to bude sloužit Jaký užitek z toho bude mít uživatel I

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

Seznámení se shellem, textové editory numerické výpočty

Technická specifikace předmětu veřejné zakázky Zhotovení interaktivního webového portálu a mobilních aplikací

Databáze Caché CSP Custom Tags

Operační systém UNIX

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Komponentový návrh SW

IV113 Validace a verifikace. Převod LTL formule na Büchi automat. Jiří Barnat

1 Úvod do kompilátorů

A Tutorial. George J. Klir State University of New York (SUNY) Binghamton, New York 13902, USA

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Příloha č. 18. Specifikace bloku PŘÍPRAVA. Příloha k zadávací dokumentaci veřejné zakázky Integrační nástroje, vstupní a výstupní subsystém

ZADÁVACÍ DOKUMENTACE

Popis egon služby. E63 - iszrreklamujudajeros. Název dokumentu: Popis egon služeb Verze: Datum aktualizace: Správa základních registrů

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Kolekce, cyklus foreach

Transkript:

Překladač a obfuskátor ECMAScriptu Jan Pobříslo - semestrální práce PJP Zadání Zadáním semestrální práce je překladač pro ECMAScript (v. 262) z jazyka rozšířeného o třídní dědění (ECMAScript používá dědění prototypové). Dalším požadavkem na překladač je co nejkratší výstupní kód, s možným nahrazením jmen identifikátorů. Implementace Obecně Semestrální práce implementuje univerzální tokenizer založený na stavovém automatu. Jsou implementovány následující automaty: lex js: Tokenizer dle standartu ECMA-262. lex rules: Tokenizer pro specifikaci syntaktických pravidel. Semestrální práce implementuje univerzální LL(1) překladač pro definovanou gramatiku s automatickým generátorem rezkurzivního sestupu a podporou sémantických pravidel. Syntaktická pravidla mohou být zadána přímo jako objekty pythonu nebo pomocí speciálního jazyka pro zadávání syntaktických pravidel včetně sémantiky. Jazyk pro syntaktická pravidla Jazyk používá běžnou formu zápisu syntaktických pravidel: Start -> Element1 Element2 Každé syntaktické pravidlo je ukončeno středníkem a za ním může následovat libovolný počet sémantických pravidel. 1

Sémantika Pravidla se zapisují ve formě přiřazení: $Element1.atribut1 = $Element2.atribut2 $Element1.atribut1 = "python expression" Identifikátorem pro element může být název elementu, pokud je v pravidle jedinečný, např. $StringLiterar, nebo celé číslo určené pozicí v pravidle. $0 je nejlevější expandovaný terminál / neterminál / výstupní symbol. Pro výstup pravidla je určen speciální identifikátor proměnné $$ Elementy Jednotlivé elementy syntaktických pravidel mohou být zapsány pomocí speciální syntaxe pro zjednodušení sémantických pravidel. (Element) Výstupní element. V okamžiku když se výstupní element dostnane na vrchol zásobníku, je vypsán pomocí funkce syntactical.analyser.output(). <Element> Rozpíše element jako bez závorek a výsledek je jako v předchozím případě poslán na výstup. [Element] Rozpíše element jako bez závorek a výsledek je nastaven jako návratová hodnota pravidla. Každý element který obsahuje nealfanumerické znaky musí být uzavřen do uvozovek, např. <")">. Zvýraznění syntaxe Vytvořil jsem soubor s jednoduchým zvýrazněním syntaxe pro editor vim: rules.vim. Pravděpodobně nejjednoduší způsob jak zvýraznění nainstalovat je zkopírovat ho do složky ~/.vim/syntax/ a poté přidat následující řádek do souboru ~/.vim/filetype.vim: au BufNewFile,BufRead *.rules setf rules Implementace Parser pro syntaktická pravidla jsem vytvořil syntaxi v pythonu a pro ověrění i v nově vytvořeném jazyce. V jazyce pro syntaktycká pravidla má téměř poloviční počet řádek a je podstatně přehlednější. Implementace v jazyce pro syntaktická pravidla (soubor rules_test.rules): Rules ->; Rules -> <Rule> Rules; Rule -> Identifier "->" RuleNext ";" Semantic; $$ = "(r0,r2,r4)" 2

RuleNext ->; $$ = "[]" RuleNext -> RuleIdentifier RuleNext; $$ = "[r0]+r1" RuleIdentifier -> IdentifierExpression; $$ = "(r0, normal )" RuleIdentifier -> "(" IdentifierExpression ")"; $$ = "(r1, out )" RuleIdentifier -> "<" IdentifierExpression ">"; $$ = "(r1, print )" RuleIdentifier -> "[" IdentifierExpression "]"; $$ = "(r1, return )" IdentifierExpression -> [Identifier]; IdentifierExpression -> [Expression]; Semantic ->; $$ = "[]" Semantic -> LeftVariableField "=" VariableFieldOrExp Semantic; $$ = "[(r0,r2)]+r3" LeftVariableField -> LeftVariable [Field]; $Field.var = $LeftVariable LeftVariable -> [ReturnVariable]; LeftVariable -> [Variable]; Field ->; $$ = "(var,none)" Field -> "." Identifier; $$ = "(var,r1)" VariableFieldOrExp -> Variable [Field]; $Field.var = $Variable VariableFieldOrExp -> [Expression]; Variable -> [IndexVariable]; Variable -> [NameVariable]; Program podporuje automatické generování diagramů pro pravidla, viz soubor generate_dot.py. Zde je diagram pravidel a neterminálů pro jazyk syntaktických pravidel: 3

ECMAScript Parser je řešen dle specifikace ECMA-262. Vynechání ze specifikace Ze specifikace jsem vypustil množinový operátor in, jelikož kvůli konstruktu for ( Left- HandSideExpression in Expression ) Statement by byla nutná duplicita většiny pravidel ve variantě bez tohoto operátoru. Viz poznámka v sekci 11.4 Relational Operators specifikace ECMAScriptu. Dále specifikace určuje automatické doplňování středníků, viz 7.9.1 Rules of Automatic Semicolon Insertion. Tyto pravilda jsou poměrně koplexní a nad rámec semestrální práce. Funkce Semestrální práce má dvě rozdílné funkcionality: 4

překlad tříd: program jsx překlad jmen identifikátorů: program jsreplace Obě funkcionality jsou poměrně základní. Hlubší analýza jmen identifikátorů by byla poměrně náročná kvůli dynamické povaze jazyka. Třídnímu dědění nyní chybí definice konstruktorů, které z časových důvodů nejsem schopen implementovat. Závěr Funkcionalita překladače je poměrně omezená, ale díky jazyku pro specifikaci syntaktických pravidel je poměrně lehce rozšířitelná. 5