====== Gramatika popisující gramatiku =====
Zápis gramatiky použitý v předchozí kapitole můžeme považovat za svého druhu programovací jazyk. \\
K tomuto jazyku můžeme napsat gramatiku:
=== Gramatika ===
Celá gramatika je poslouplností pravidel
grammar : ( rule )* ;
=== Pravidlo ===
Pravidla zapisujeme pomocí jména pravidla následovaného dvojtečkou, popisem pravidla a středníkem.
rule : identifier ":" description ";" ;
// Dvojtečka a středník v uvozovkách jsou dvojtečkou a středníkem zmíněným v předcházející větě. // \\
// Dvojtečka a středník bez uvozovek jsou součástí právě definovaného pravidla. // \\
=== Výraz popisující pravidlo ===
Popis pravidla je posloupnost jedné nebo více alternativ oddělených svislou čarou.
description : alternative ( "|" alternative )* ;
:-) Svislou čáru (nebo) můžeme považovat za jakousi aditivní operaci
=== Alternativa ===
Alternativa je posloupnost jednoducých položek. \\
Může být i prázdná.
alternative : ( simple )* ;
:-) Zápis položek za sebou můžeme považovat za obdobu multiplikativní operace, znak násobení také ovykle vynecháváme
=== Jednoduchá položka ===
Jednoduchá položka může být řetězec v dvojtých uvozovkách (terminal), \\
identifikátor (neterminál) nebo výraz v závorkách.
simple : string_literal | identifier | ebnf ;
=== Výraz v závorkách ===
Výraz v závorkách rekurzivně používá již zavedený výraz pro popis pravidla (description). \\
Za závorkami může následovat otazník, hvězdička nebo plus.
ebnf : "(" description ")" ( "?" | "*" | "+" | ) ;