Notacja BNF

::= - przypisanie 
[] - element może wystąpić 0 lub 1 raz (co najwyżej 1 raz) 
{} - wybierz jeden z elementów występujących (dokładnie 1 raz) 
{}+ - element musi wystąpić co najmniej 1 raz (1 lub więcej razy) 
{}* - element może wystąpić 0 lub więcej razy (0 lub więcej razy) 
<> - zostało zdefiniowane wcześniej (lub pózniej)

Akceptowane znaki

cyfra::={0|1|2|3|4|5|6|7|8|9} 
liczba_calk::=<cyfra>{<cyfra>}* 
liczba_nat::={0|1|2|3|4|5|6|7|8|9}+ 
liczba_zmiennop::={<cyfra>}+<separator_dzies>{<cyfra>}* 
liczba::={<liczba_calk>|<liczba_zmiennop>} 
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>} 
znak::={<cyfra>|<litera>|_} 
nazwa::=<litera>{<znak>}* 
spacja::={" "} 
cudzyslow::={"} 
ciapek::={'} 
daszek::={^}
znak_inny::={~|!|@|#|$|%|^|&|*|(|)|-|+|=|[|]|{|}|;|:|<|>|,|.|/|?|\|"|"|<spacja>} 
wszystkie::={<znak>|{<znak_inny>}*} 

Operatory i symbole

op_rowna::={=}
op_mat::={ +|-|*|/ } 
op_jedno::={+ | -}
op_int::={ +|-|*}
op_plus::={+}
op_rel::={ <|>|=|>=|<=|<> } 
op_log::={or | and}
op_przyp::= {:=}
nawias_o_o::={(}
nawias_o_z::={)}
nawias_k_o::={[}
nawias_k_z::={]} 
klamra_otwierajaca::={ { | (* } 
klamra_zamykajaca::={ } | *) } 
separator_dzies::={.} 
przecinek::={,}
sep_zd::= {;}
sep_dek::= {:}

st_tr_fa::={true|false}

Słowa kluczowe

s_program::={program}
s_begin::={begin}
s_end::={end}
s_not::={not}
s_const::={const}
s_var::={var} 
s_if::={if}
s_then={then} 
s_else::={else} 
s_for::={for} 
s_to::={to}
s_do::={do}
s_new::={new}
zwal_pam::= {dispose}
op_we::={read | readln}
op_wy::= {write | writeln}

Ad 1

typ_zm::= {integer | real | string | boolean | char}
nazwa_gl::=<nazwa>
zm_gl::= <nazwa_gl><sep_dek><typ_zm><sep_zd> | <nazwa_gl><sep_dek><daszek><typ_zm><sep_zd> |
         <nazwa_gl> {<przecinek><nazwa_gl>}* <sep_dek><typ_zm><sep_zd>
dekl_zmienych::= <s_var> {<zm_gl>}+

st_gl::=<nazwa_gl> <op_rowna> {<liczba>|<st_tr_fa>|<ciapek>{znak}*<ciapek>} <sep_zd> | 
  <nazwa_gl> <sep_dek> <typ_zm> <op_rowna> {<liczba>|<st_tr_fa>|<ciapek>{znak}*<ciapek>} <sep_zd>

dekl_stalych::= <s_const> {<st_gl>}+

Ad 2

czyt::= <op_we> <naw_o_o> <nazwa_gl> <naw_o_z> <sep_zd>
pis::= <op_wy><naw_o_o> {<nazwa_gl> | <liczba> | <st_tr_fa> | <ciapek>{znak}*<ciapek>} <naw_o_z> 
<sep_zd>

Ad 3  <op_int>

zm_bool::= [<s_not>] { <nazwa_gl> | <st_tr_fa> } 
zm_str::= [<op_plus>] { <nazwa_gl> | <ciapek>{<znak>}*<ciapek>}
zm_int::= [op_jedno] { <nazwa_gl> | <liczba_calk>}
zm_rea::= [op_jedno] { <nazwa_gl> | <liczba_zmiennop>}

oper_bool::= [<nawias_o_o>] <zm_bool> <op_log> <zm_bool> [<nawias_o_z>] {<op_log>[<nawias_o_o>] 
<zm_bool> <op_log> <zm_bool> [<nawias_o_z>]}*

oper_str::= [<nawias_o_o>] <zm_str> <op_plus> <zm_str> [<nawias_o_z>] {<op_plus>[<nawias_o_o>] 
<zm_str>  <op_plus> <zm_str> [<nawias_o_z>]}*

oper_int::= [<nawias_o_o>] <zm_int> <op_int> <zm_int> [<nawias_o_z>] {<op_int>[<nawias_o_o>] <zm_int> 
 <op_int> <zm_int> [<nawias_o_z>]}*

oper_rea::= [<nawias_o_o>] <zm_rea> <op_mat> <zm_rea> [<nawias_o_z>] {<op_mat>[<nawias_o_o>] <zm_rea> 
 <op_mat> <zm_rea> [<nawias_o_z>]}*

operacja_arytm::= <nazwa_gl> <op_przyp> {
<oper_bool> | <oper_str> | <oper_int> | <oper_rea>
} <sep_zd>

Ad 4

operacja_przyp::= <nazwa_gl> <op_przyp> {<liczba>|<nazwa_gl>|<st_tr_fa>|<ciapek>{znak}*<ciapek>} 
<sep_zd>

Ad 5

por_bool::= <zm_bool> <op_log> <zm_bool> {<op_log> <zm_bool> <op_log> <zm_bool>}*
por_str::= <zm_str> <op_plus> <zm_str> {<op_plus> <zm_str> <op_plus> <zm_str>}*
por_int::= <zm_int> <op_int> <zm_int> {<op_int> <zm_int> <op_int> <zm_int> }*
por_rea::= <zm_rea> <op_mat> <zm_rea> {<op_mat> <zm_rea> <op_mat> <zm_rea> }*

operacja_por::= {<por_bool> <op_rel> <por_bool> | <por_str> <op_rel> <por_str> |
<por_int> <op_rel> <por_int> | <por_rea> <op_rel> <por_rea>}

Ad 6

blok::= <s_begin> <operacje> <s_end> <sep_zd> | <s_begin> <operacje> <s_end> <separator_dzies>

Ad 7

komentarz::= <klamra_otwierajaca> <tekst komentarza> <klamra_zamykajaca>

Ad 8

operacja_warunkowa::= <s_if> <operacja_por> <s_then> <blok>

Ad 9

petla::= <s_for> <operacja_arytm> <s_to> {<nazwa_gl> | <st_tr_fa> | <ciapek><znak><ciapek> | 
<liczba_calk>}+ <s_do> <blok>

Ad 10

zm_dyn::= <s_new> <nawias_o_o> <nazwa_gl> <nawias_o_z> <sep_zd>
pob_zm_dyn::= <zm_gl> <daszek> <sep_zd>
<niszcz_zm_dyn> = <zwal_pam> <nawias_o> <zm_gl> <nawias_o> <sep_zd>

operacje = <czyt_pis> | <operacja_arytm> | <operacja_przyp> | <blok> | <komentarz> | <petla> | 
<operacja_warunkowa> | <zm_dyn> | <pob_zm_dyn> | <niszcz_zm_dyn>