Syntaxe (programovací jazyk)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

V informatice, syntaxe programovacího jazyka je 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 a 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[editovat | editovat zdroj]

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 jadsadasd robintváří 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[editovat | editovat zdroj]

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 a tyto 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 a mohou 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[editovat | editovat zdroj]

Syntaxe textových programovacích jazyků je obvykle definována kombinací regulárních výrazů (pro lexikální strukturu) a Backus-Naur Form (pro gramatickou strukturu) k indukčně stanoveným syntaktickým kategoriím (neterminály) a terminální symboly.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Syntax (programming languages) na anglické Wikipedii.