Opis podzbioru języka
Pascal, który jest interpretowany przez zaimplementowany interpreter.
1. Akceptowane znaki
::=
- 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
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::={'}
znak_inny::={~|!|@|#|$|%|^|&|*|(|)|-|+|=|[|]|{|}|;|:|<|>|,|.|/|?|\|"|"|<spacja>}
wszystkie::={<znak>|{<znak_inny>}*}
2. Operatory i symbole
operator::={
+|-|*|/ }
operator_relacji::={
<|>|=|>=|<=|<> }
nawias::={
(|)|[|] }
klamra_l::={
{ }
klamra_p::={
} }
separator_dzies::={
.}
inne_symbole::=
{ ,| : }
3. Słowa kluczowe
s_and::={and}
s_begin::={begin}
s_const::={const}
s_do::={do}
s_else::={else}
s_end::={end}
s_for::={for}
s_if::={if}
s_or::={or}
s_program::={program}
s_then={then}
s_to::={to}
s_var::={var}
4. Deklaracje zmiennych i operacji
nazwa::=<litera>{<znak>}*
nazwa_zmiennej::=<nazwa>
typ::={string|integer|real|boolean}
separator::={ ; } zmienna::=<nazwa_zmiennej>{','[<nazwa_zmiennej>]}*':'<typ><separator>
wartosc::={<liczba>|<zmienna>}
operacja_matem::=<wartosc>{<operator><wartosc>}*
operacja_matem_w_nawias::={<operacja_matem>|'('<operacja_matem>')'}
operacja_matem_z_nawias::=<operacja_matem_w_nawias>{<operator><operacja_matem_w_nawias>}*
wyrazenie_mat::={'('{<operacja_mat_z_nawias>|<wyrazenie_mat>}{<operator_matematyczny><wyrazenie_mat>}*')'|{<operacja_mat_z_nawias>|<wyrazenie_mat>}{<operator_matematyczny><wyrazenie_mat>}*}
przypisanie::={:=}
operacja_przypisania::=<zmienna><przypisanie>{<liczba>|<zmienna>|<tekst>|<wyrazenie_mat>}
wynik::=<zmienna><operator><zmienna><separator>
instrukcja_prosta::={<zmienna><przypisanie><zmienna><separator>
|<zmienna><przypisanie><wynik><separator>}
instrukcja_zlozona::=<s_begin>{<instrukcja_prosta>}*<s_end><separator>
warunek::= {{<wartosc><operator_relacji><wartosc>}|{<zmienna><s_and><zmienna>}|{<zmienna><s_or><zmienna>}|{<zmienna><s_not><zmienna>}}
petla_for::=<s_for><zmienna>':='{<liczba_nat>|<zmienna>|<wyrazenie_mat>}<s_to>{<liczba_nat>|<zmienna>|<wyrazenie_mat>}<s_do><
instrukcja_zlozona>
komentarz::= <klamra_l>{ <nazwa><spacja>}*<klamra_p>
5. Operacje we/wy
o_read::={read} o_readln::={readln}
o_write::={write} o_writeln::={writeln} tekst::={<ciapek><wszystkie><ciapek>}
output::={<liczba>|<zmienna>|<tekst>|<wyrazenie_mat>}
wczytywanie_zmiennych::={<o_read><nazwa_zmiennej><separator>|<o_readln><nazwa_zmiennej><separator>}
wypisywanie::={<o_write><wszystkie><separator>|<o_writeln><wszystkie><separator>}
6. Struktura programu
def_programu::= {<s_program><nazwa><separator>}
[<s_const>{<nazwa><przypisanie>{<liczba>|<tekst><separator>}}+]
[<s_var>{<zmienna>}+] <s_begin> {<operacja_przypisania>|<wypisywanie>|<wczytywanie_zmiennych>|<instrukcja_prosta>|<instrukcja_zlozona>}*
<s_end>'.'
|