NOTACJE BNF
Notacja BNF dla analizy leksykalnej:
< cyfra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
< liczba> ::= < cyfra>{< cyfra>}
< liczba_rzeczywista> ::= < liczba>.< liczba>
< 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 | 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
< slowo> ::= < litera> {< litera> | < cyfra>}
< znak> ::= "+"| "-" | "/" | "*" | ";" | "=" | "(" | ")" | ":" | " " |" ' " |
| "spacja" | "znak końca linii" | "<" | ">"
Słowa kluczowe:
< a_program>::=program
< a_begin>::=begin
< a_end>::=end
< a_var>::=var
< a_const>::=const
< a_for>::=for
< a_to>::=to
< a_do>::=do
< a_if>::=if
< a_then>::=then
< a_read> ::= read
< a_write> ::= write
< koniec_progr> := end.
Rozszerzona notacja BNF:
Struktura blokowa programu:
< naglowek_programu>::= < a_program>+ < slowo> + < srednik>
< sekcja_deklaracji>::= < deklaracja_stalych> | < deklaracja_zmiennych> + < srednik> | < deklaracja_stalych> + < deklaracja_zmiennych>
< deklaracja_stalych> ::= < a_const> + < slowo> + < rowna_się> + < wartosc> + < srednik>
< wartosc> ::=< liczba> | < liczba_rzeczywista>
< deklaracja_zmiennych> ::= < a_var> + < slowo> + < dwukropek> + < typ_danych> + < srednik>
< dwukropek> ::= :
< sekcja_instrukcji> ::= < a_begin> + (< wejscie> | < wyjscie> | < instrukcje_przypisania> | < petla> | < rozgalezienie> + < a_end> + < kropka>
< petla> ::= < a_for> + < instrukcja_przypisania> + < a_to> + < wartosc> + < a_do> + ( < wyjscie> | < blok>)
< blok> ::= < a_begin> +{ < instrukcja_przypisania> | < dodawanie> | < odejmowanie> | < mnozenie> | < dzielenie> | < wyjscie> + < wejscie>}+ < a_end> + < srednik>
< rozgalezienie> ::=< a_if> + < instrukcja_porownania> + < a_then> + (< wyjscie> | < instrukcja_przypisania> | < blok>)
< instrukcje_porownania> ::=< wartosc> + < operacje_logiczne> + < wartosc> | < slowo> + < operacje_logiczne> + < slowo> | < slowo> + < operacje_logiczne> + < wartosc>
Operacje arytmetyczne:
< plus> ::=+
< dodawanie> ::= {< wartosc> + < plus> + < wartosc>}
< minus> ::= -
< odejmowanie> ::= {< wartosc> + < minus> + < wartosc>}
< razy> ::= *
< mnozenie> ::= {< wartosc> + < razy> + < wartosc>}
< podziel> ::= /
< dzielenie> ::= {< wartosc> + < podziel> + }
Operacje logiczne:
< operacje_logiczne> ::= < rowna_się> | < rozne> | < wieksze> | < mniejsze> | < wieksze_rowne> | < mniejsze_rowne>
< rowna_się> ::= =
< rozne> ::= <>
< wieksze> ::= >
< mniejsze> ::= <
< wieksze_rowne> ::= >=
< mniejsze_rowne> ::= <=
Separatory:
< srednik> ::= ;
< kropka> ::= .
Instrukcja przypisania:
< znak_przypisania> ::= < dwukropek> + < rowna_się>
< instrukcja_przypisania>::=< slowo> + < znak_przypisania> + < wartosc> + < srednik> | < slowo> + < znak_przypisania> + < slowo> + < srednik>
Typy danych:
< typ_danych> ::= integer | real
Instrukcje wprowadzenia i wyprowadzenia:
< wejscie> ::= < a_read + < nawias_otw> + < wartosc>+ < nawias_zam> + < srednik> | < a_read> + < nawias_otw> + < slowo> + < nawias_zam> + < srednik>
< wyjscie> ::= < a_write> + < nawias_otw> + < wartosc>+ < nawias_zam> + < srednik> | < a_write> + < nawias_otw> + < apostrof> +< slowo>+< apostrof> + < nawias_zam> + < srednik> | < a_write> + < nawias_otw> + < slowo> + < nawias_zam> + < srednik>
< nawias_otw> ::= (
< nawias_zam> ::= )
< apostrof> ::= '