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

Smazaný obsah Přidaný obsah
Robot: Opravuji 1 zdrojů and označuji 0 zdrojů jako nefunkční #IABot (v2.0beta9)
→‎Proces analýzy: Lexikální analýza (scanner) se řídí konečný deterministickým automatem, který na základě stavů a přechodů rozhoduje, jestli se jedná o začátek nového tokenu nebo ne.
Řá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 [[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. ParserScanner 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ů]].