====== 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 ")" ( "?" | "*" | "+" | ) ;