Interpreter Pascala MGA

Specyfication BNF.

only in Polish now.

<pascalprog> :: = program <nazwa>; var <deklaracja> begin {<body>} end.

<identyfikator>:: = <znak> | {<znak>}

<znak>::=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|

|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

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

<deklaracja> ::= <identyfikator>:<typ>;

<typ>::= integer|float

<body> ::= <operacja>|<petla>|<if>|<operacja_przypisania>

<operacja_przypisania>::= <identyfikator>:=<liczbaC>|<liczbaR>|<identyfikator>;

<liczbaC>::=1..9{<cyfra>}|-1..9{<cyfra>}

<liczbaR>::= <liczbaC>.0|1|2|3|4|5|6|7|8|9{<cyfra>}

<operacja>::= <operacja_przypisania>+ | - | * | /

<identyfikator>|<liczbaC>|<liczbaR>;

<if>::=if <nawiasL><warunek_logiczny><nawiasP>then begin<body>end else begin<body>end;

<warunek_logiczny>::= <warunek>|<warunek><operator_logiczny><warunek>

<warunek>::= <nawiasL><identyfikator> <operator_porownania> <identyfikator>|<liczbaC>|<liczbaR><nawiasP>

< operator_porównania> ::= = |<|>|<>|<=|>=

<operator_logiczny>::=and|or

<nawiasL>::=(

<nawiasP>::=)

<petla>::=while<nawiasL><warunek_logiczny><nawiasP>begin<body>end;

<operacja_wejscia>::=read <nawias> <identyfikator> <nawias> | readln <nawias> <identyfikator> <nawias>;

<operacja_wyjscia>::=write <nawias> <identyfikator> <nawias>| write <nawias>{ <tekst>} <nawias> |

writeln <nawias> <identyfikator> <nawias>| writeln <nawias>{ <tekst>} <nawias>;

<tekst> ::= <tekst_poczatek><litery> <cyfry> | <znaki_specjalne> | {tekst} <tekst_koniec>

<znaki_specjalne> ::= ! | @ | # | $ | % | ^ | & | * | _ | = | [ | ] | ; | : | | | ` | ~ | , | < | . | > | ? | / | | | \ |

<tekst_poczatek>::= <czudzyslow>

<tekst_koniec>::= <czudzyslow>

<czudzyslow>::=