Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jak si píšu vlastní jazyk

Jak si píšu vlastní jazyk

Avatar for Přemysl Karbula

Přemysl Karbula

February 28, 2017

Other Decks in Programming

Transcript

  1. Proč • Jak v elementu odstranit diakritiku? – MILION pravidel

    vs jedno „Najít a Nahradit“ s regulárním výrazem? • Původní Merja neměla velkého ohlasu – V jádře Mergada javascriptová pravidla nebudou – Jednou za čas někdo potřebuje specifickou věc, kterou Mergado neumí, nebo by se hrozně hackovalo • Udělám to sám – A vytřu všem zrak
  2. Proč ne JS • Spouštět JS uvnitř PHP – Google

    V8 + phpv8/v8js • Potřeba kompilace, další „neznámá“ vrstva vyžadující řešit bezpečnost – J4P5 • Čisté PHP, aktualizace 2005, ECMAScript 3rd ed. (1999) – J4PHP5 • Vychází z J4P5, aktualizace 2014 (mimo můj PR) • Obsahuje chyby • Kromě V8+v8js vše zastaralé, neudržované a chybové • Vlastní implementace ECMAScriptu? Blázen?! – Přes 550 stránek specifikací
  3. První pokusy • Řádek po řádku a reguláry – Fungovalo

    to – Umělo to expandovat proměnné – Kód jsem ale hned přepsal a tak ztratil – Dnes jsem to za půl hodiny napsal znova – Příklad!
  4. Primi • Tokenizer+Parser = PHP-PEG – Zápis pomocí PEG gramatiky

    – Vychází z EBNF (Extended Backus-Naurus Form) • Iterovat přes uzly v AST a vyhodnocovat konkrétními handlery
  5. Primi • Průběh při tvorbě jazyka: – 1) Upravit gramatiku

    jazyka – 2) Pomocí PHP-PEG z gramatiky vygenerovat parser – 3) Zobrazit si AST, vizualizovat si ho – 4) Napsat příslušné handlery – 5) Opakovat • Příklad