Notacja BNF

 

Notacja Backhusa-Naura dopuszcza następujące znaki (symbole metajęzykowe):

<,> - nawiasy ostre określają definiowane pojęcie,

::= - oznacza „jest zdefiniowane jako”,

| - oznacza lub,

{} –oznacza, że pojęcie może wystąpić zero, jeden lub wiele razy,

[ ] –oznacza, że pojęcie może wystąpić zero lub jeden raz

 

<mala_litera>::="a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|"y"|"z"

<duza_litera>::={"A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"|"V"|"W"|"X"|"Y"|"Z"

<litera>::=<mala_litera>|<duza_litera>

<cyfra>::="0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"

<liczba_int>::=["-"]<cyfra>{<cyfra>}

<liczba_real>::=["-"]<liczba_int>"."<liczba_int>

<liczba>::=<liczba_int>|<liczba_real>

<identyfikator>::=<litera>{<litera>|<cyfra>}

<bool>::="true"|"false"

<separator>::=";"

<operator_arytmetyczny>::="+"|"-"|"*"|"/"|"div"

<operator_porownania>::="="|"<"|">"|"<="|">="

<operator_logiczny>::="and"|"or"|"not"

<typ>::="integer"|"real"|"boolean"

<t_program>::="program"

<t_var> ::= "var"

<t_begin> ::= "begin"

<t_end> ::= "end"

<koniec_programu> ::= "end."

<t_if> ::= "if"

<t_else> ::= "else"

<t_while> ::= "while"

<t_do> ::= "do"

<t_read>::="read"

<t_write>::="write"

<slowo_kluczowe> ::= <typ_danych> | <t_program> | <t_var> | <t_begin> | <t_end> | <koniec_programu> | <t_if> | <t_else> | <t_while> | <t_do> | <bool> | <operator_logiczny> | <t_read> | <t_write>

<deklaracja>::=<identyfikator>{","<identyfikator>}":"<typ><separator>

<blok_deklaracji>::=<t_var><deklaracja>{<deklaracja>}

<wyrazenie_arytmetyczne> ::= <liczba> | <identyfikator><operator_arytmetyczny> <liczba> |<identyfikator>  |  <wyrazenie_arytmetyczne><operator_arytmetyczny> <liczba> |<identyfikator>  |  "(" <wyrazenie_arytmetyczne> ")"

<wyrazenie_logiczne> ::= <bool> | <liczba> | <identyfikator><operator_porownania> <liczba> | <identyfikator>

<wyrazenie_logiczne> ::=  <wyrazenie_logiczne> <operator_logiczny> <wyrazenie_logiczne>

<wyrazenie_logiczne> ::= "("<wyrazenie_logiczne> ")"

<we>::=<t_read>"("<identyfikator>")"

<wy>::=<t_write>"("<identyfikator>|<liczba>")"

<operacja_we/wy>::=<we>|<wy><separator>

<instrukcja_przypisania> ::= <identyfikator> ":="<liczba> | <identyfikator>  | <wyrazenie_arytmetyczne> | <wyrazenie_logiczne><separator>

<instrukcja> ::= <instrukcja_przypisania> | <instrukcja_pętli> | <instrukcja_warunkowa> | <operacja_we/wy>

<blok_instrukcji>::=<t_begin>{<instrukcja>}<t_end>

<instrukcja_pętli> ::= <t_while> <wyrażenie_logiczne><t_do> <instrukcja>|<blok_instrukcji>

<instrukcja_warunkowa> ::= <t_if> <wyrażenie_logiczne> <t_then><instrukcja>|<blok_instrukcji> [ <t_elese> <instrukcja>|<blok_instrukcji> ]

<blok_programu> ::= <t_program> <nazwa_zmiennej>[ <blok_deklaracji_zmiennych> ] <t_begin><instrukcja>{<instrukcja>}<koniec_programu>