3. blok: Syntaktická analýza, úvod do atributových gramatik (motivace)
Metody syntaktické analýzy LL a LR byly detailně studovány v první třetině kurzu IA006.
Přednášky:
Shlédněte přednášku, která je tématicky rozdělena do 3 částí: část 1. se týká výhradně syntaktické analýzy, další části jsou de facto motivačním úvodem k atributovým a překladovým atributovým gramatikám.
1. Úkoly syntaktického analyzátoru (SyAn), jeho komunikace s ostatními moduly kompilátoru,
principy syntaktické analýzy metodou rekurzivního sestupu (recursive descent parsing).
2. Zavedení pojmu překladové (bezkontextové) gramatiky a její využití pro možnou konstrukci (kódu) AST.
Příklad: formální překlad (vstupního) infix výrazu E a na ekvivalentn (výstupní) postfix (jako postfix kód AST).
3a. Příklad: doplnění pravidel (standardní) CFG o funkce konstrukce AST v jednom průchodu při analýze zdola (motivace pro následnou definici atributových gramatik - vizte další blok).
Sumarizující foto tabule k výše uvedené přednášce lze nalézt v učebních materiálech předmětu, sekce
Záznamy přednášek nebo též zde:
3b. Příklad: doplnění pravidel CFG o funkce konstrukce AST v jednom průchodu při analýze shora (motivace pro následnou definici atributových gramatik - vizte další blok).
Studium:
K těmto přednáškám doporučuji doplňkově prostudovat ze skript M.Češka a kol.: Překladače tyto části: (za předpokladu, že jste absolvovali kurs IA006 nebo samostatně dostudovali jeho 1. třetinu.
K vlastní syntaktické analýze pak navíc z uvedených skript (dále jen skripta):
- sekci 3.2.5 (str. 41-44) "Analýza rekurzívním sestupem"; možno též najít řadu odkazů pod názvem "Recursive descent parsing". Jedná se pouze o jinou implementaci LL analýzy, a to nikoli pomocí PDA. ale pomocí tzv. "Recursive Finite State Machines" (vzájemně rekurzivních konečně stavových automatů - vzájemně rekurzívních procedur). Poznámka: (Vzájemně) rekurzívní deterministické konečné automaty (DFA) rozpoznávají tutéž třídu jazyků jako deteterministické zásobníkové automaty (DPDA).
- orientačně se seznámit s použitím generátoru syntaktických analyzátorů yacc v sekci 3.5.1. (s. 93-100)