Slovník pojmů
Syntaxe
Syntaxe říká, jak musí být zapsaný kód konkrétního jazyka, aby z něj nástroj dokázal určit platnou strukturu. Syntakticky správný zápis přitom nemusí řešit správný problém.
Stručná definice
Pravidla, podle nichž parser čte program.
Při čtení zdrojového kódu potřebuje parser rozpoznat, které znaky tvoří klíčová slova, názvy, hodnoty a jednotlivé konstrukce. Syntaxe proto určuje například pořadí tokenů, párování závorek a oddělovače příkazů. Přesné interní kroky zpracování se mohou mezi jazyky lišit, ale každý nástroj musí umět rozlišit platný zápis od neplatného.
Syntaxe není význam programu. Výraz může být zapsán správně a přesto vracet špatnou cenu objednávky, měnit zrušenou objednávku nebo vynechat autorizaci. Taková chyba patří do logiky či chování programu, ne mezi syntax errors.
Jaký problém řeší
Dává programu jednoznačnou strukturu.
Bez pravidel zápisu by nebylo spolehlivě poznat, co je výraz, příkaz, blok nebo volání funkce. Stejně vypadající konstrukce mohou mít v PHP, JavaScriptu a TypeScriptu jiné detaily; podobnost zápisu není důvod pravidla míchat.
- klíčová slova, například if, return nebo class
- identifikátory pro proměnné, funkce a třídy
- literály jako čísla, řetězce, true a false
- operátory, závorky a oddělovače určující strukturu výrazů a příkazů
- bloky a závorky, které vymezují rozsah podmínky, funkce nebo třídy
Praktický příklad
Chybějící závorka je syntaktická chyba, ne business rozhodnutí.
Dva níže uvedené fragmenty patří do oddělených souborů: první parser odmítne, protože v podmínce chybí uzavírací závorka. Druhý má platnou syntaxi a obsahuje i definici hodnoty. To ještě neříká, zda podmínka odpovídá pravidlu e-shopu: například může chybět doprava, stav zrušení objednávky nebo práce se správnou měnou.
Syntakticky platný kód může dále obsahovat chybu, kterou odhalí až běh konkrétní cesty, test nebo statická analýza. Každý z těchto nástrojů odpovídá na jinou otázku.
Dva izolované fragmenty PHP
// Syntaktická chyba: v podmínce chybí uzavírací závorka.
if ($total > 0 {
echo 'Objednávka má cenu.';
}
// Syntakticky platný fragment v jiném souboru.
$total = 1_000;
if ($total > 0) {
echo 'Objednávka má cenu.';
}
Jak funguje
Od znaků k platné konstrukci
Diagram popisuje zjednodušený princip, ne povinnou implementaci každého kompilátoru nebo interpreteru.
- Znaky ve zdroji Soubor obsahuje posloupnost znaků v konkrétním programovacím jazyce.
- Tokeny Nástroj rozpozná například identifikátory, klíčová slova, operátory a literály.
- Parser Ověří, zda tokeny tvoří platné výrazy, příkazy a bloky podle gramatiky jazyka.
- Syntax error nebo struktura programu Neplatná konstrukce skončí syntaktickou chybou; platná může pokračovat k dalším kontrolám či běhu.
Co syntaxe není
Platný zápis je nutný, ale nestačí.
Příbuzné pojmy se často pletou, protože se s nimi vývojář setká ve stejném editoru nebo při jednom spuštění kontroly.
Syntaxe a sémantika
Syntaxe určuje tvar zápisu. Sémantika řeší, co konstrukce znamená. Správné závorky nezaručují správný výpočet ani správné business pravidlo.
Syntax error a runtime chyba
Syntax error brání platnému zpracování zápisu. Runtime chyba vzniká až při vykonání konkrétní cesty, například při nedostupné službě nebo neplatných datech.
Syntaxe a coding style
Odsazení, délka řádku a pořadí importů jsou převážně týmové konvence. Formatter je může sjednotit, ale nemění význam programu ani obecně neopraví neplatnou konstrukci.
Syntaxe a zvýrazňování
Syntax highlighting je vizuální pomůcka editoru, nikoli autoritativní validace nebo důkaz, že lze soubor spustit. Některé editory pro zvýraznění využívají parser či jazykový server, přesto je potřeba spustit skutečnou kontrolu.
Omezení a časté chyby
Čitelný zápis potřebuje víc než platnou gramatiku.
Pomáhá
- psát malé a přehledně strukturované výrazy
- nechat editor a parser hlásit chybu co nejdříve
- používat formatter pro jednotný styl týmu
- volit názvy, které vysvětlí význam podmínky nebo hodnoty
Neřeší
- zda je algoritmus či business pravidlo správné
- zda jsou data v produkci platná
- zda má uživatel oprávnění akci provést
- zda je krátký zápis automaticky srozumitelnější než rozdělený kód
Praktická práce
Syntaxi se učte spolu s významem konstrukcí.
Při výuce nebo review je užitečné pojmenovat, zda jde o chybu zápisu, typů, běhu nebo business pravidla. Jinak se problém s chybějící závorkou zamění za problém návrhu a oprava je nejasná.
Různé jazyky mají odlišné gramatiky i konvence. Přenášet návyk z PHP do JavaScriptu nebo TypeScriptu bez ověření pravidel vede k chybám, i když konstrukce na první pohled vypadají podobně.
Kontrola změny
Nejdřív platný zápis, potom správné chování.
Syntaxe je první vstupní brána, ne konečný důkaz kvality.
- nepovažovat syntakticky správný kód za automaticky správný program
- rozlišit syntax error od chyby za běhu podle fáze, ve které vzniká
- nečekat od formatteru opravu každé neplatné nebo nejasné konstrukce
- nepoužívat zvýraznění syntaxe jako náhradu skutečné validace
- spouštět vedle parseru testy a statickou analýzu podle potřeb projektu
Časté otázky
Co lze od syntaxe čekat
Může být syntakticky správný program chybný?
Ano. Syntaxe pouze potvrzuje platnou strukturu zápisu. Program může mít chybný výpočet, špatné pravidlo nebo bezpečnostní problém.
Jaký je rozdíl mezi syntax error a runtime chybou?
Syntax error vznikne při zpracování neplatného zápisu. Runtime chyba se objeví při vykonání konkrétní cesty programu, například při práci s nedostupným zdrojem.
Je syntax highlighting kontrola kódu?
Ne. Je to vizuální pomůcka editoru, která nenahrazuje parser, kompilátor ani analýzu.
Opraví formatter každou syntaktickou chybu?
Ne. Formatter upravuje především styl kódu, kterému dostatečně rozumí. Neumí bezpečně domýšlet zamýšlenou strukturu každé chybné konstrukce.
Je coding style součástí syntaxe?
Většinou ne. Některé mezery či konce příkazů mohou být jazykem významné, ale pravidla odsazení a formátování bývají týmovou konvencí.
Osobní zkušenost
Kvalita začíná čitelným a ověřitelným kódem.
V PHP projektech používám vedle pravidel zápisu také automatické testy a statickou analýzu, protože žádná z těchto kontrol sama nestačí.