Syntaktická analýza: Porovnání verzí

Smazaný obsah Přidaný obsah
m typografie
Narovnání přesměrování kalkulátor
Řádek 33:
Následující příklad demonstruje obvyklý postup analýzy programovacího jazyka se dvěma úrovněmi gramatiky: lexikální a syntaktickou.
 
První fází je [[lexikální analýza]], při níž se vstupní text, na který lze pohlížet jako na proud znaků, členěn na symboly (tokeny), zpravidla definované gramatikou [[regulární výraz|regulárních výrazů]]. Například [[Kalkulačka|kalkulátor]], který má zpracovávat vstup tvaru <code>127 * (3+45)^2</code>, jej rozloží na symboly <code>127</code>, <code>*</code>, <code>(</code>, <code>3</code>, <code>+</code>, <code>45</code>, <code>)</code>, <code>^</code> a <code>2</code>, z nichž každý je smysluplným symbolem v aritmetickém výrazu. Scanner obsahuje pravidla, která určují, že znaky <code>*</code>, <code>+</code>, <code>^</code>, <code>(</code> a <code>)</code> označují začátek nového symbolu, takže nebudou uvažované nesmyslné symboly jako <code>12*</code> nebo <code>(3</code>.
 
Další fází je syntaktická analýza (parsing), při které se kontroluje, zda posloupnost symbolů tvoří povolený výraz. Na této úrovni je jazyk obvykle popsán [[bezkontextová gramatika|bezkontextovou gramatikou]], která rekurzivně definuje komponenty, z nichž lze složit výraz, a pořadí, ve kterém se musí objevit. Některá pravidla definující programovací jazyky nemohou být vyjádřena bezkontextovou gramatikou – problémy činí například typová kontrola a deklarace identifikátorů. Tato pravidla mohou být formálně vyjádřena pomocí [[atributová gramatika|atributové gramatiky]] a jejich dodržování se prakticky kontroluje pomocí [[tabulka symbolů|tabulky symbolů]].
 
Poslední fází je [[sémantická analýza]], která zjišťuje význam jednotlivých částí datové struktury a přiřazuje jim příslušné akce. V případě [[Kalkulačka|kalkulátor]]u mohou být těmito akcemi např. ukládání konstant na [[Zásobníkový počítač|zásobník]] nebo provedení určité aritmetické operace; v případě [[překladač]]e je akcí generování fragmentů [[Strojový kód|kódu]]. Pro definování těchto činností lze použít [[překladová gramatika|překladovou gramatiku]].
 
== Typy syntaktické analýzy ==