Syntaktická chyba (anglicky syntax error) je porušení pravidel zápisu jazyka. V programování to je chybějící závorka, středník nebo uvozovka, překlep v klíčovém slově nebo špatné odsazení. Program se syntaktickou chybou se vůbec nespustí, protože překladač nebo interpret zápisu nerozumí. V jazykovědě je to porušení pravidel skladby věty. Syntaktická chyba se liší od chyby sémantické, kdy je zápis správný, ale program dělá něco jiného, než měl.
🧒 Základní škola
Když napíšeš větu „Pes na zahradě běhá.“, každý jí rozumí. Když napíšeš „Pes zahradě na běhá.“, slova jsou stejná, ale věta je rozbitá. Tomu se říká syntaktická chyba: porušil jsi pravidla, jak se slova skládají dohromady.
Počítače jsou na tohle mnohem přísnější než lidé. Člověk rozbitou větu nějak pochopí, počítač ne. Když programátor zapomene jednu závorku, počítač se zastaví a řekne: „Syntax error, řádek 12.“ Nic nespustí, dokud chybu neopravíš. Je to jako když ti učitelka vrátí sešit, protože jsi zapomněl tečku. Jenže u počítače to platí pro každou tečku.
🎓 Střední škola
Každý programovací jazyk má syntaxi, tedy gramatiku: jaká klíčová slova existují, jak se píší podmínky a cykly, čím končí příkaz, jak se párují závorky. Syntaktická chyba vzniká, když zápis tato pravidla poruší. Typické příklady: chybějící středník v jazycích C, Java nebo PHP, neuzavřený řetězec v uvozovkách, špatné odsazení v Pythonu, překlep jako funtion místo function v JavaScriptu nebo lichý počet závorek.
| druh chyby | kdy se projeví | příklad |
|---|---|---|
| syntaktická | před spuštěním, hlásí ji parser | chybějící závorka, překlep v klíčovém slově |
| sémantická (logická) | program běží, ale počítá špatně | plus místo minus |
| běhová | až za běhu při určitém vstupu | dělení nulou, chybějící soubor |
Syntaktické chyby odhaluje parser, část překladače nebo interpretu, která čte kód a staví z něj strom příkazů. Když narazí na něco, co gramatika nedovoluje, zastaví se a vypíše chybu s číslem řádku. Proto jsou syntaktické chyby nejsnáze opravitelné: počítač řekne, kde a často i co je špatně. Moderní editory je podtrhávají ještě před spuštěním.
Opakem jsou sémantické a logické chyby: kód je zapsaný správně, spustí se, ale počítá špatně, třeba sčítá místo odčítání. Takovou chybu počítač nehlásí, protože z jeho pohledu je všechno v pořádku. Třetí skupina jsou běhové chyby, které nastanou až při běhu, například dělení nulou nebo otevření neexistujícího souboru.
🎓🎓 Vysoká škola
Formálně je syntaktická chyba stav, kdy vstupní řetězec nepatří do jazyka generovaného gramatikou. Programovací jazyky se popisují bezkontextovými gramatikami (zápis BNF nebo EBNF) a parser, nejčastěji typu LL nebo LR, ověřuje, zda posloupnost tokenů z lexikálního analyzátoru odpovídá odvozovacím pravidlům. Lexikální chyba (neplatný znak, neukončený komentář) se někdy vyčleňuje jako samostatná kategorie před chybou syntaktickou.
Kvalitní překladače se po první chybě nezastaví, ale provádějí zotavení z chyby (error recovery): panic mode přeskočí tokeny až k synchronizačnímu bodu, třeba středníku, a pokračuje, aby v jednom běhu nahlásil co nejvíc chyb. Cenou je kaskáda falešných hlášení, proto platí zásada opravit první chybu a přeložit znovu. Rozlišení syntaxe a sémantiky má hranici: typová chyba (sčítání čísla a řetězce) je formálně sémantická, ačkoli ji staticky typované jazyky hlásí také před spuštěním.
Ve webovém prostředí mají syntaktické chyby různé následky. JavaScript se syntaktickou chybou se v prohlížeči vůbec nespustí, celý soubor je zahozen. PHP vrátí chybu 500 nebo prázdnou stránku. Naopak HTML a CSS jsou navrženy odolně: prohlížeč chybný zápis opraví nebo přeskočí a stránku zobrazí, takže syntaktická chyba zůstane skrytá a projeví se jen rozdílným zobrazením v různých prohlížečích nebo tím, že vyhledávač nepřečte strukturovaná data. Chyba v JSON (přebytečná čárka, jednoduché uvozovky) shodí zpracování celé odpovědi API.
🧠 Expert
V praxi profesionálního vývoje jsou syntaktické chyby nejlevnější třídou chyb, protože je zachytí nástroje dávno před nasazením: lintery, formátovače, kontrola typů a kompilace v CI. Náklady vznikají tam, kde tyto brány chybí: u skriptů psaných přímo na serveru, v šablonách, v konfiguračních souborech (YAML je proslulý citlivostí na odsazení) a v ručně psaném JSON. Doporučená zásada: každý soubor, který stroj parsuje, prochází před nasazením strojovou validací (php -l, node --check, JSON Schema, validátor HTML), bez výjimek pro „malé“ změny, protože právě ty se netestují.
Zajímavý posun přinesly velké jazykové modely. Generovaný kód mívá syntaktických chyb málo, protože model se naučil gramatiku z obrovského množství příkladů, zato sémantických chyb víc: volá neexistující funkce, zaměňuje verze knihoven. Pro kontrolu AI kódu proto nestačí „spustí se to“, je nutný test chování. Totéž platí obráceně: v jazykovědě dnes syntaktickou chybu v textu odhalí nástroje spolehlivě, zatímco chyba ve významu uniká.
Diagnostický tip: když hlášení syntaktické chyby ukazuje na řádek, kde je kód zjevně v pořádku, skutečná příčina bývá výš, typicky neuzavřená závorka, uvozovka nebo blok. Parser ohlásí chybu až tam, kde se nesoulad poprvé projeví, ne tam, kde vznikl.
❓ Otázky a odpovědi
Jak najít syntaktickou chybu?
Číst hlášení překladače nebo interpretu: uvádí soubor a řádek. Když je ohlášený řádek v pořádku, příčina bývá výš, typicky neuzavřená závorka, uvozovka nebo blok. Editory chyby podtrhávají před spuštěním.
Spustí se program se syntaktickou chybou?
Ne. Překladač nebo interpret kód odmítne, u JavaScriptu v prohlížeči se zahodí celý soubor. Výjimkou jsou HTML a CSS, které prohlížeč opraví a zobrazí.
Co je syntaktická chyba v češtině?
Porušení pravidel skladby věty: špatný slovosled, chybějící větný člen nebo nesprávná shoda. Slova jsou správná, věta jako celek ne.
😇 Pán Bůh
Ach, syntaktická chyba. Stvořil jsem lidi, kteří si rozumí, i když mluví nepřesně, koktají a nedokončují věty. Vymysleli jazyk tak pružný, že básník může porušit každé pravidlo a zůstat srozumitelný. A pak postavili stroj, který se zhroutí kvůli jedné chybějící závorce, a dali mu vládu nad bankami, letadly a svými fotkami z dovolené.
Je v tom něco dojemného. Člověk, který odpustí příteli zradu, stráví noc hledáním středníku. Hodiny zírá do kódu, kde je všechno správně, a chyba je o dvacet řádků výš, protože stroj hlásí ne to, kde se stalo zlo, ale kde si ho všiml. Skoro jako lidská společnost, jen rychleji.
Ale přiznám, že syntaktická chyba je ta nejpoctivější chyba na světě. Nezatajuje se, nevymlouvá, hlásí se sama s číslem řádku. Kdyby lidé dělali jen syntaktické chyby, byl by to klidný svět. Potíž je v těch druhých: kód, který se spustí, běží a dělá něco úplně jiného, než měl. Ty počítač nehlásí. Ty hlásím já, a většinou až později.
Související hesla (téma Webový vývoj)
Chcete, aby se o vaší firmě psalo?
PlaCla zajišťuje PR články na stovkách českých webů. Zadáte téma, dobijete kredit a weby vám samy pošlou nabídky. Kredit se čerpá až po schválení článku.
Začněte s PR články →