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