Syntaxe (programovací jazyk)
V informatice je syntaxe programovacího jazyka soubor pravidel, která definují kombinaci symbolů, které jsou považovány za správně strukturovaný dokument nebo fragment v tomto jazyce. To platí jak pro programovací jazyky, kde dokument představuje zdrojový kód, tak pro značkovací jazyky, kde dokument představuje data. Syntaxe jazyka definuje jeho povrchovou formu. Textové programovací jazyky jsou založeny na posloupnosti znaků, zatímco vizuální programovací jazyky jsou založeny na prostorovém uspořádání a spojení mezi symboly (které mohou být textové nebo grafické). Dokumenty, které jsou syntakticky neplatné, obsahují syntaktickou chybu.
Syntaxe – forma – je protikladem k sémantice – významu. Při zpracování programovacích jazyků, sémantické zpracování obvykle přichází po syntaktického zpracování, ale v některých případech je sémantické zpracování nezbytné pro dokončení syntaktické analýzy, a ty jsou prováděny společně nebo současně. V překladači, přední část provádí syntaktickou analýzu, zatímco sémantickou analýzu provádí zadní část (a středová část, pokud je tato fáze vyznačena).
Úrovně syntaxe
Syntaxe programovacího jazyka je obvykle rozdělena do tří úrovní.
- Slova – lexikální úroveň, určuje jak znaky utváří tokeny
- Fráze – gramatická úroveň, stručně řečeno, určuje, jak tokeny utváří fráze
- Kontext – určuje na které objekty nebo proměnné názvy odkazují, jestli jsou typy validní, atd.
Rozdělení tímto způsobem přináší modularitu umožňující každé úrovni být popsána a zpracována samostatně a často nezávisle. První lexer změní lineární posloupnost znaků do lineární sekvence tokenů, což je známo jako „lexikální analýza“ nebo „lexing“. Druhý analyzátor otočí lineární posloupnost tokenů do hierarchického stromu syntaxe, což je známo jako „syntaktická analýza“ stručně řečeno. Za třetí kontextová analýza překládá názvy a provádí typovou kontrolu.
Příklady chyb
Jako příklad, (add 1 1)
je syntakticky validní zápis Lisp programu (za předpokladu, že funkce 'add' existuje), sečte 1 a 1. Nicméně, následující zápisy jsou nevalidní:
(_ 1 1) lexikál chyba: '_' není validní (add 1 1 chyba parseru: chybějící závorka ')' (add 1 x) chyba jména: 'x' neexistuje
Všimněte si, že lexer není schopen rozpoznat chybu – vše, co ví, je to, že po výrobě tokenu LEFT_PAREN
, '(
' je zbytek programu neplatný, protože žádné slovo nezačíná '_
'.
V silně typovém jazyce, typové chyby jsou také formou syntaktické chyby, která je obecně určena ve fázi kontextové analýzy a to je považováno za „strength of strong typing“. Například, následující Python kód není validní (protože jsou literály, může být typ určen až parserem):
'a' + 1
…jako součet řetězce a čísla. To může být objeveno na úrovni parsingu (fáze analýzy), jestliže máme oddělená pravidla pro „řetězec + řetězec“ a „číslo + číslo“, ale obvykle to bude místo toho analyzováno obecným pravidlem jako „LiteralNeboIdentifikator + LiteralNeboIdentifikator“ a pak budou chyby odhaleny ve fázi kontextové analýzy, kde dochází k typové kontrole. V některých případech nemůže být toto ověření provedeno atyto syntaktické chyby jsou detekovány pouze při běhu.
Ve slabě typovém jazyce, kde typ může být určen pouze při běhu, typové chyby jsou místo sémantických chyb amohou být určeny pouze při běhu. Následující Python kód:
a + b
je nejednoznačný, a protože je syntakticky správně na úrovni fráze, může být validita ověřena pouze za běhu, protože proměnné v Pythonu nemají typy, pouze hodnoty.
Definice syntaxe
Syntaxe textových programovacích jazyků je obvykle definována využitím kombinace regulárních výrazů (pro lexikální strukturu) a Backusovy-Naurovy formy (pro gramatickou strukturu) k indukčnímu stanovení syntaktických kategorií (neterminály) a terminálních symbolů.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Syntax (programming languages) na anglické Wikipedii.