Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałSobiesława Garncarz Został zmieniony 9 lat temu
1
Języki formalne i gramatyki Copyright, 2005 © Jerzy R. Nawrocki Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/tpi/ Teoretyczne podstawy informatyki Wykład 7
2
J.Nawrocki, Języki formalne i gramatyki Plan wykładu Z ostatniego wykładu Uproszczony analizator leksykalny Metoda zejść rekurencyjnych Zbiory first
3
J.Nawrocki, Języki formalne i gramatyki Plan wykładu Z ostatniego wykładu Uproszczony analizator leksykalny Metoda zejść rekurencyjnych Zbiory first
4
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu 1+ =1+ =1+ =1+ = { 1, 11, 111,... } Gramatyka Symbole terminalne Symbole nieterminalne Symbol początkowy Produkcje 1 S S S 1 S S 1
5
J.Nawrocki, Języki formalne i gramatyki Pojęcia analizy składniowej Produkcja gramatyki (T N) + Jeśli w zbiorze gramatyki jest , to x yx y
6
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu – Sprawdzanie gramatyki 1. S 1 2. S S 1 1+ =1+ =1+ =1+ = { 1, 11, 111,... } 1:S 1. 1 11:S 2. S 1 11 1. 111:S 2. S 1 1 111 1. S 1 2.
7
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu Forma 1 Forma 2 Forma k ... Forma 1Forma k ** Domknięcie zwrotne relacji wywodu
8
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu Symbol początkowy Zdanie ** Język formalny L(G) = { x: S * x x T* }
9
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu – Klasyfikacja Chomsky’ego Gramatyki bezkontekstowe Noam Chomsky
10
J.Nawrocki, Języki formalne i gramatyki Z ostatniego wykładu - Gramatyka bezkontekstowa () 1. W ( W ) 1 2. W 1 Jeden nieterminal Noam Chomsky
11
J.Nawrocki, Języki formalne i gramatyki Zastosowania języków formalnych Kompilatory dla nowych języków programowania (C#, xSQL) Generowanie kodu na podstawie modeli (UML, HRT HOOD) Przypadki testowe (pokrycie, gen.) Szacowanie maksymalnego czasu wykonania programów Analiza łańcuchów DNA (wzorce) Przetwarzanie dokumentów XML
12
J.Nawrocki, Języki formalne i gramatyki Fazy kompilacji Analiza leksykalna.pas Środowisko czasu wykon. Analiza składniowa Generacja kodu pośr. Generacja kodu wynik..exe Wyrażenia regularne Gramatyki
13
J.Nawrocki, Języki formalne i gramatyki Plan wykładu Z ostatniego wykładu Uproszczony analizator leksykalny Metoda zejść rekurencyjnych Zbiory first
14
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny procedure InitCurrent; function Current: Char; procedure Next; ((1))
15
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny procedure InitCurrent; function Current: Char; procedure Next; ((1))
16
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny ((1)) procedure InitCurrent; function Current: Char; procedure Next; (
17
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny procedure InitCurrent; function Current: Char; procedure Next; ((1))
18
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny procedure InitCurrent; function Current: Char; procedure Next; ((1))
19
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny var CurrentChar: Char; procedure InitCurrent; begin read(CurrentChar); end; function Current: Char; procedure Next; ((1))
20
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny var CurrentChar: Char; procedure InitCurrent; begin read(CurrentChar); end; function Current: Char; begin Current:= CurrentChar; end; procedure Next; ((1))
21
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny var CurrentChar: Char; procedure InitCurrent; begin read(CurrentChar); end; function Current: Char; begin Current:= CurrentChar; end; procedure Next; begin read(CurrentChar); end; ((1))
22
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny ((1)) function Take(c: Char): Boolean; procedure InitCurrent; function Current: Char; procedure Next;
23
J.Nawrocki, Języki formalne i gramatyki Uproszczony analizator leksykalny ((1)) function Take(c: Char): Boolean; var old: Char; begin old:= Current; Next; Take:= c=old; end; procedure InitCurrent; function Current: Char; procedure Next;
24
J.Nawrocki, Języki formalne i gramatyki Plan wykładu Z ostatniego wykładu Uproszczony analizator leksykalny Metoda zejść rekurencyjnych Zbiory first
25
J.Nawrocki, Języki formalne i gramatyki Idea metody zejść rekurencyjnych () 1. W ( W ) 1 2. W 1 begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean;
26
J.Nawrocki, Języki formalne i gramatyki Idea metody zejść rekurencyjnych () 1. W ( W ) 1 2. W 1 begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin ( if Current = ‘ ( ’ then () W:= Take(‘ ( ’) and W and Take (‘ ) ’) 1 else W:= Take(‘ 1 ’) end; ((1))
27
J.Nawrocki, Języki formalne i gramatyki Idea metody zejść rekurencyjnych () 1. W ( W ) 1 2. W 1 begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin ( if Current = ‘ ( ’ then () W:= Take(‘ ( ’) and W and Take (‘ ) ’) 1 else W:= Take(‘ 1 ’) end; ((1)) W
28
J.Nawrocki, Języki formalne i gramatyki Idea metody zejść rekurencyjnych () 1. W ( W ) 1 2. W 1 begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin ( if Current = ‘ ( ’ then () W:= Take(‘ ( ’) and W and Take (‘ ) ’) 1 else W:= Take(‘ 1 ’) end; ((1)) W
29
J.Nawrocki, Języki formalne i gramatyki Idea metody zejść rekurencyjnych () 1. W ( W ) 1 2. W 1 begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin ( if Current = ‘ ( ’ then () W:= Take(‘ ( ’) and W and Take (‘ ) ’) 1 else W:= Take(‘ 1 ’) end; ((1))
30
J.Nawrocki, Języki formalne i gramatyki Plan wykładu Z ostatniego wykładu Uproszczony analizator leksykalny Metoda zejść rekurencyjnych Zbiory first
31
J.Nawrocki, Języki formalne i gramatyki Nieterminale mogą być problemem begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; 0 1. W A 0 1 2. W B 1 3. A ... 4. B ...
32
J.Nawrocki, Języki formalne i gramatyki Nieterminale mogą być problemem begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin if Current =... then 0 W:= A and Take(‘ 0 ’) 1 else W:= B and Take(‘ 1 ’) end; 0 1. W A 0 1 2. W B 1 3. A ... 4. B ...
33
J.Nawrocki, Języki formalne i gramatyki Nieterminale mogą być problemem begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin if Current =... then 0 W:= A and Take(‘ 0 ’) 1 else W:= B and Take(‘ 1 ’) end; A .. first(A) = {b T: A * b } 0 1. W A 0 1 2. W B 1 3. A ... 4. B ...
34
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 }
35
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 }
36
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } first(W) = first(A) first(B)
37
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } first(W) = first(A) first(B)
38
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 01 2. W 0 B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } first(W) = first(A) ...
39
J.Nawrocki, Języki formalne i gramatyki Zbiory first A .. first(A) = {b T: A * b } 0 1. W A 0 01 2. W 0 B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } 0 first(W) = first(A) { 0 }
40
J.Nawrocki, Języki formalne i gramatyki Zbiory first 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin (2 if Current = ‘ ( ’ or Current = ‘ 2 then 0 W:= A and Take(‘ 0 ’) 1 else W:= B and Take(‘ 1 ’) end;
41
J.Nawrocki, Języki formalne i gramatyki Co by było gdyby? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 4 6. B 4 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin (2 if Current = ‘ ( ’ or Current = ‘ 2 then 0 W:= A and Take(‘ 0 ’) 1 else W:= B and Take(‘ 1 ’) end;
42
J.Nawrocki, Języki formalne i gramatyki Co by było gdyby? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 (2 first(A) = { (, 2 } 34 first(B) = { 3, 4 } begin InitCurrent; if W then writeln('OK') else writeln('Error') end. function W: Boolean; begin (2 if Current = ‘ ( ’ or Current = ‘ 2 ‘ then 0 W:= A and Take(‘ 0 ’) 1 else W:= B and Take(‘ 1 ’) end; 32 first(B) = { 3, 2 } Musi być: first(A) first(B) =
43
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 ( n 2 ) n 0 | 3 * 2 1 gdzie n 0 ( k 2 ) k 0 | 2 0 | 3 + 2 1 | 2 1 gdzie k 1
44
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 ( k 2 ) k 0 | 2 0 | 3 + 2 1 | 2 1 gdzie k 1 0 1. W N 0 () 4. N ( N ) (2 ) 5. N ( 2 )
45
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 ( k 2 ) k 0 | 2 0 | 3 + 2 1 | 2 1 gdzie k 1 0 1. W N 0 2 1 2. W T 2 1 () 4. N ( N ) (2 ) 5. N ( 2 ) 3 6. T 3 T 3 7. T 3
46
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 ( k 2 ) k 0 | 2 0 | 3 + 2 1 | 2 1 gdzie k 1 0 1. W N 0 2 1 2. W T 2 1 3 6. T 3 T 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) 0 8. K 0 1 9. K 1
47
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W A 0 1 2. W B 1 () 3. A ( A ) 3 5. B 3 B 2 4. A 2 2 6. B 2 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) Gramatyki równoważne
48
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) first(N) = ( { ( }
49
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) ( first(N) = { ( } first(T) = 3 { 3 }
50
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin end; ( first(N) = { ( } 3 first(T) = { 3 }
51
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin 0 W:= N and Take(‘ 0 ’) end; ( first(N) = { ( } 3 first(T) = { 3 }
52
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin ( if Current = ‘ ( ’ then 0 W:= N and Take(‘ 0 ’) end; ( first(N) = { ( } 3 first(T) = { 3 }
53
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin ( if Current = ‘ ( ’ then 0 W:= N and Take(‘ 0 ’) 21 W:= T and Take(‘ 2 ’) and Take(‘ 1 ’) end; ( first(N) = { ( } 3 first(T) = { 3 }
54
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin ( if Current = ‘ ( ’ then 0 W:= N and Take(‘ 0 ’) 3 else if Current = ‘ 3 ’ 21 W:= T and Take(‘ 2 ’) and Take(‘ 1 ’) end; ( first(N) = { ( } 3 first(T) = { 3 }
55
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin ( if Current = ‘ ( ’ then 0 W:= N and Take(‘ 0 ’) 3 else if Current = ‘ 3 ’ 21 W:= T and Take(‘ 2 ’) and Take(‘ 1 ’) 2 else W:= Take(‘ 2 ’) and K end; ( first(N) = { ( } 3 first(T) = { 3 }
56
J.Nawrocki, Języki formalne i gramatyki Jak sobie z tym poradzić? 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function W: Boolean; begin ( if Current = ‘ ( ’ then 0 W:= N and Take(‘ 0 ’) 3 else if Current = ‘ 3 ’ 21 W:= T and Take(‘ 2 ’) and Take(‘ 1 ’) 2 else W:= Take(‘ 2 ’) and K end; ( first(N) = { ( } 3 first(T) = { 3 }
57
J.Nawrocki, Języki formalne i gramatyki Funkcja związana z nieterminalem T 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function T: Boolean; begin end;
58
J.Nawrocki, Języki formalne i gramatyki Funkcja związana z nieterminalem T 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function T: Boolean; var ok: Boolean; begin 3 ok:= Take (‘ 3 ’); end;
59
J.Nawrocki, Języki formalne i gramatyki Funkcja związana z nieterminalem T 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function T: Boolean; var ok: Boolean; begin 3 ok:= Take (‘ 3 ’); T:= ok and T end;
60
J.Nawrocki, Języki formalne i gramatyki Funkcja związana z nieterminalem T 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function T: Boolean; var ok: Boolean; begin 3 ok:= Take (‘ 3 ’); 3 if Current = ‘ 3 ’ then T:= ok and T end; 3 first(T) = { 3 }
61
J.Nawrocki, Języki formalne i gramatyki Funkcja związana z nieterminalem T 0 1. W N 0 2 1 2. W T 2 1 0 8. K 0 3 6. T 3 T 1 9. K 1 3 7. T 3 () 4. N ( N ) 2 3. W 2 K (2 ) 5. N ( 2 ) function T: Boolean; var ok: Boolean; begin 3 ok:= Take (‘ 3 ’); 3 if Current = ‘ 3 ’ then T:= ok and T else T:= ok end;
62
J.Nawrocki, Języki formalne i gramatyki Podsumowanie Wreszcie! Gramatyka formalna Produkcje gramatyki Wywód zdania Klasyfikacja Chomsky’ego Metoda zejść rekurencyjnych Zbiory first Założenie: brak produkcji pustych
63
J.Nawrocki, Języki formalne i gramatyki Literatura J. Cybulka, B. Jankowska, J. Nawrocki, Automatyczne przetwarzanie tekstów. AWK, Lex i YACC, Nakom, Poznań, 2002.
64
J.Nawrocki, Języki formalne i gramatyki Ocena wykładu 1. Wrażenie ogólne? (1 - 6) 2. Zbyt wolno czy zbyt szybko? 3. Czy dowiedziałeś się czegoś ważnego? 4. Co poprawić i jak?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.