Gramatika popisující příkazy zjednodušeného jazyka C

while_stat :  "while" "(" expr ")" stat   ;
 
if_stat    :  "if" "(" expr ")" stat ( "elif" "(" expr")" stat  )* ( "else" stat  )?   ;
 
compound_stat : "{" ( stat )* "}" ;
 
simple_stat :  expr ";" ;
 
empty_stat :  ";" ;
 
stat : while_stat | if_stat | compound_stat | simple_stat | empty_stat ;
 
 
simple_expr : identifier | number  | "(" expr ")" ;
 
mult_expr :  simple_expr ( ("*"|"/") simple_expr )* ;
 
add_expr :  mult_expr ( ("+"|"-") mult_expr )* ;
 
expr : add_expr ( "," expr )? ;

Syntaktická pravidla

   rule_name : rule_expression ;

Terminální symboly

Terminální symboly představují klíčová slova nebo oddělovače.
Zapisují se v jednoduchých nebo dvojitých uvozovkách.

    "while" "(" ")"

Neterminální symboly

Neterminální symboly zapisujeme pomocí identifikátorů bez uvozovek.
Jsou to jména syntaktických pravidel,
nebo jména “skupinových” lexikálních symbolů (identifier, number, real_number, character_literal, string_literal).

   expr

Alternativy

Jednotlivé alternativy oddělujeme svislou čarou |
Alternativa může být i prázdná.

   stat : while_stat | if_stat | compound_stat ;
   ( "*" | "/" )

Volitelné sekce ( )?

   ( "else" stat  ) ?

Zavorka s otazníkem ( )? dovoluje opakování 0 nebo 1 krát.

Libovolné opakování ( )*

   ( stat )*

Závorka s hvězičkou ( )* dovoluje opakování 0, 1, 2, … libovolně krát.

Opakování alespoň jednou ( )+

   ( stat )+

Závorka s plusem ( )+ dovoluje opakování 1, 2, … libovolně krát.

Poznámka: závorky ( ), ( )*, ( )+ ani ( )? nezbytně nepotřebujeme

( A )? můžeme zapsat pomocí obyčejných závorek a prázdné alternativy.

   ( A | ) 

( A )+ nahradíme pomocným symbolem B

   B : A | B A ;

( A )* nahradíme pomocným symbolem C

   C : | C A ;

C je nic nebo C následované A

Místo kulatých závorem můžeme vždy nadefinovat nějaký pomocný symbol.

A svislou čáru nemusíme používat, pokud dovolíme několik pravidel se stejným jménem před dvojtečkou.
Dva předcházející příklady zapíšeme následovně:

   B : A;
   B : B A ;
   C : ;
   C : C A ;

Tím naše pravidla můžeme převédst na tvar často používaný v literatuře
(místo dvojtečky se používá šipka, jednotlivá pravidla na samostatnou řádku, středník se nepoužívá)

   jméno definovaného neterminálu -> posloupnost (i prázdná) terminálních a neterminálních symbolů 
 
prekl/stat.txt · Last modified: 2023/03/02 17:18 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki