Translatory Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 11
J.Nawrocki, Gramatyki i translatory Plan wykładu Gramatyka i język Notacja Backusa-Naura Definicje sterowane składnią Translacja metodą zejść rekurencyjnych
J.Nawrocki, Gramatyki i translatory Gramatyka S A B A 1 A A 1 B 0 B B 0 Symbol początkowy
J.Nawrocki, Gramatyki i translatory Gramatyka S A B A 1 A A 1 B 0 B B 0 Symbol początkowy Symbole nieterminalne N = {S, A, B}
J.Nawrocki, Gramatyki i translatory Gramatyka S A B A 1 A A 1 B 0 B B 0 Symbol początkowy Symbole nieterminalne N = {S, A, B} Symbole terminalne T = {0, 1}
J.Nawrocki, Gramatyki i translatory Gramatyka S A B A 1 A A 1 B 0 B B 0 Symbol początkowy Symbole nieterminalne N = {S, A, B} Symbole terminalne T = {0, 1} Produkcje
J.Nawrocki, Gramatyki i translatory Domknięcie relacji wywodu S A B A 1 A A 1 B 0 B B 0 Wywód: SA BA B 1 B ) 2) 3) 4) 5) S Z S można wywieść 10 stosując 1 lub więcej produkcji
J.Nawrocki, Gramatyki i translatory Język formalny Gramatyka G = S – Symbol początkowy N – Zbiór symboli nieterminalnych T – Zbiór symboli terminalnych P – Zbiór produkcji L(G) = {x T*: S x + } Język formalny L zdefiniowany przez gramatykę G:
J.Nawrocki, Gramatyki i translatory Klasyfikacja Chomskyego Gramatyki liniowe Noam Chomsky
J.Nawrocki, Gramatyki i translatory Gramatyki liniowe Prawoliniowa a 1.S a S 2.S B b 3.B b B b 4.B b aba+ b+aba+ b+ Twierdzenie. Dla każdego wyrażenia regularnego istnieje gramatyka prawoliniowa opisująca ten sam język.
J.Nawrocki, Gramatyki i translatory Klasyfikacja Chomskyego Gramatyki liniowe Gramatyki bezkontekstowe Noam Chomsky
J.Nawrocki, Gramatyki i translatory Języki nieliniowe ab 1.S a S b ab 2.S a b aban bnaban bn n > 0 Jeden nieterminal
J.Nawrocki, Gramatyki i translatory Plan wykładu Gramatyka i język Notacja Backusa-Naura Definicje sterowane składnią Translacja metodą zejść rekurencyjnych
J.Nawrocki, Gramatyki i translatory Rozszerzona notacja Backusa-Naura John Backus Produkcje + wyrażenia regularne ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= +
J.Nawrocki, Gramatyki i translatory Rozszerzona notacja Backusa-Naura John Backus Produkcje + wyrażenia regularne ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= + ::= * ::= ( *) * ::= ( +) *
J.Nawrocki, Gramatyki i translatory Przejście z EBNF na gramatyki ::= * J B J A J
J.Nawrocki, Gramatyki i translatory Przejście z EBNF na gramatyki John Backus ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * C 0 C 1 C 2... C 9
J.Nawrocki, Gramatyki i translatory Przejście z EBNF na gramatyki John Backus ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= * J B J A J L C L C L
J.Nawrocki, Gramatyki i translatory Przejście z EBNF na gramatyki John Backus ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= * J B J A J S L S L * S
J.Nawrocki, Gramatyki i translatory Przejście z EBNF na gramatyki John Backus ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= * ::= ( *) * ::= ( +) * ::= * J B J A J W S W S + W
J.Nawrocki, Gramatyki i translatory Plan wykładu Gramatyka i język Notacja Backusa-Naura Definicje sterowane składnią Translacja metodą zejść rekurencyjnych
J.Nawrocki, Gramatyki i translatory Definicja sterowana składnią L -> C L L -> C val= L.val + 1; val= 1; Liczba cyfr liczby naturalnej
J.Nawrocki, Gramatyki i translatory Definicja sterowana składnią W -> S + W W -> S S -> L * S S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order*10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Definicja sterowana składnią W -> S + W W -> S S -> L * S S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order*10; val= C.val; order= 10; val= L.val * S.val; val= L.val;
J.Nawrocki, Gramatyki i translatory Plan wykładu Gramatyka i język Notacja Backusa-Naura Definicje sterowane składnią Translacja metodą zejść rekurencyjnych
J.Nawrocki, Gramatyki i translatory Translacja W -> S + W W -> S S -> L * W S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order 10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Translacja Bool L(int *val, int *order){ Bool ok; char First_L [] = " "; char Follow_L []= "+*="; int C_val, L_order, L_val; ok= C(&C_val); if (ok && Widzisz(First_L)){ /*** L -> C L ***/ ok= L(&L_val, &L_order); *val= C_val * L_order + L_val; *order= L_order * 10; return ok; } else if (ok && Widzisz(Follow_L)){ /*** L -> C ***/ *val= C_val; *order= 10; return ok; } else return SyntaxError(1); } W -> S + W W -> S S -> L * W S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order 10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Translacja Bool L(int *val, int *order){ Bool ok; char First_L [] = " "; char Follow_L []= "+*="; int C_val, L_order, L_val; ok= C(&C_val); if (ok && Widzisz(First_L)){ /*** L -> C L ***/ ok= L(&L_val, &L_order); *val= C_val * L_order + L_val; *order= L_order * 10; return ok; } else if (ok && Widzisz(Follow_L)){ /*** L -> C ***/ *val= C_val; *order= 10; return ok; } else return SyntaxError(1); } W -> S + W W -> S S -> L * W S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order 10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Translacja Bool L(int *val, int *order){ Bool ok; char First_L [] = " "; char Follow_L []= "+*="; int C_val, L_order, L_val; ok= C(&C_val); if (ok && Widzisz(First_L)){ /*** L -> C L ***/ ok= L(&L_val, &L_order); *val= C_val * L_order + L_val; *order= L_order * 10; return ok; } else if (ok && Widzisz(Follow_L)){ /*** L -> C ***/ *val= C_val; *order= 10; return ok; } else return SyntaxError(1); } W -> S + W W -> S S -> L * W S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order 10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Translacja Bool L(int *val, int *order){ Bool ok; char First_L [] = " "; char Follow_L []= "+*="; int C_val, L_order, L_val; ok= C(&C_val); if (ok && Widzisz(First_L)){ /*** L -> C L ***/ ok= L(&L_val, &L_order); *val= C_val * L_order + L_val; *order= L_order * 10; return ok; } else if (ok && Widzisz(Follow_L)){ /*** L -> C ***/ *val= C_val; *order= 10; return ok; } else return SyntaxError(1); } W -> S + W W -> S S -> L * W S -> L L -> C L L -> C val= C.val * L.order + L.val; order= L.order 10; val= C.val; order= 10;
J.Nawrocki, Gramatyki i translatory Podsumowanie Gramatyki i języki EBNF: produkcje + wyr. regularne Przejście z EBNF na gramatykę Definicja sterowana składnią Translacja metodą zejść rekurencyjnych Wreszcie!