Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

Podobne dokumenty
Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

JIP. Analiza składni, gramatyki

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

GRAMATYKI BEZKONTEKSTOWE

Matematyczne Podstawy Informatyki

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

0.1 Lewostronna rekurencja

Języki programowania zasady ich tworzenia

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

Języki i gramatyki formalne

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Gramatyki rekursywne

Efektywna analiza składniowa GBK

Języki formalne i automaty Ćwiczenia 1

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

3.4. Przekształcenia gramatyk bezkontekstowych

Obliczenia inspirowane Naturą

Zadanie analizy leksykalnej

Symbol, alfabet, łańcuch

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Hierarchia Chomsky ego

Hierarchia Chomsky ego Maszyna Turinga

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Języki formalne i automaty Ćwiczenia 3

Języki formalne i automaty Ćwiczenia 2

Gramatyki grafowe. Dla v V, ϕ(v) etykieta v. Klasa grafów nad Σ - G Σ.

Analizator syntaktyczny

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel

Gramatyki atrybutywne

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Gramatyka operatorowa

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka

ForPascal Interpreter języka Pascal

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Metody Kompilacji Wykład 3

Wykład 5. Jan Pustelnik

Lista 5 Gramatyki bezkontekstowe i automaty ze stosem

Podstawy Informatyki Gramatyki formalne

Języki programowania wprowadzenie

Języki formalne i automaty Ćwiczenia 9

Metodologie programowania

Obliczenia inspirowane Naturą

Matematyczne Podstawy Informatyki

Rachunek logiczny. 1. Język rachunku logicznego.

Algorytmy zapisywane w pseudojęzyku programowania. Klasa 2 Lekcja 6

Języki, automaty i obliczenia

Składnia rachunku predykatów pierwszego rzędu

Teoria automatów i języków formalnych. Określenie relacji

Języki, automaty i obliczenia

Definiowanie języka przez wyrażenie regularne(wr)

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Jaki język zrozumie automat?

Algorytmy i struktury danych. wykład 2

Analiza metodą zstępującą. Bartosz Bogacki.

Wykład 1 Wiadomości wstępne

Języki formalne i automaty Ćwiczenia 4

R O Z D Z I A Ł I. Podstawowe pojęcia i ogólne twierdzenia lingwistyki matematycznej. 1. WyraŜenia, języki, gramatyki

11 Probabilistic Context Free Grammars

Maszyna Turinga języki

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

Języki formalne i automaty Ćwiczenia 8

Języki formalne i gramatyki

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Logika Matematyczna (1)

10. Translacja sterowana składnią i YACC

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki

Elementy rachunku lambda. dr hab. inż. Joanna Józefowska, prof. PP 1

Teoretyczne podstawy informatyki. Wykład 12: Gramatyki. E. Richter-Was 1

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Algorytmy stochastyczne, wykład 05 Systemy Liendenmayera, modelowanie roślin

Analiza semantyczna. Gramatyka atrybutywna

Języki, automaty i obliczenia

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP

Obliczenia inspirowane Naturą

1. Maszyna Turinga, gramatyki formalne i ONP

Programowanie w języku Python. Grażyna Koba

Obliczenia inspirowane Naturą

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych

Monoidy wolne. alfabetem. słowem długością słowa monoidem wolnym z alfabetem Twierdzenie 1.

Paradygmaty programowania

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Wyrażenia regularne.

Teoretyczne Podstawy Informatyki

Języki formalne i automaty Ćwiczenia 6

Języki formalne i automaty Ćwiczenia 7

Metody Kompilacji Wykład 13

Programowanie deklaratywne

Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne

KATEDRA INFORMATYKI TECHNICZNEJ. Ćwiczenia laboratoryjne z Logiki Układów Cyfrowych. ćwiczenie 204

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Programowanie deklaratywne

Interpreter - EasyCompile

Gramatyki regularne i automaty skoczone

Generatory analizatorów

Transkrypt:

Katedra Informatyki Stosowanej Politechnika Łódzka Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań dr hab. inŝ. Lidia Jackowska-Strumiłło Historia rozwoju języków programowania 1955 1955 Fortran 1960 Algol 60 Lisp 1960 1965 1970 1975 1980 1985 1990 BCPL Algol 60 Simula Pascal Modula 2 Modula 3 Mesa Oberon CPL* C C++ Concurent Pascal Dustributed* CSP* Processes Smalltalk Ada Prolog ISWIM* ML: SASL Miranda Standard ML Haskel Gofer Scheme Zeta Lisp Mac Inter Lisp Lisp Common Lisp CLOS 1965 1970 1975 1980 1985 1990 1995 C++ standard Ada 95 1995 1

Fortran 60 Algol 60 Lisp 60 CPL PL/1 BCPL 70 Pascal Simula 67 70 C Algol 68 ML Clu 80 Modula-2 C z klasami Smalltalk-80 80 Ada Beta C++ Objective C CLOS ANSI C Eiffel 90 Modula-3 C++arm 90 Ada9X C++std ZaleŜność między językiem C++ a innymi językami programowania w ujęciu historycznym Definicja języka Podstawą kaŝdego języka jest słownik. W językach formalnych elementy słownika (słowa) nazywamy symbolami (podstawowymi). Ciąg słów zbudowany według określonych reguł nazywamy zdaniem. Zbiór reguł lub formuł, które określają zbiór formalnie poprawnych zdań nazywamy gramatyką lub składnią. Składnia lub struktura języka pozwala na określenie, czy dany ciąg słów jest zdaniem. Składnia i semantyka (znaczenie) języka są ze sobą blisko powiązane. 2

Język formalny Język formalny to podzbiór zbioru łańcuchów skończonych złoŝonych z elementów zbioru skończonego nazywanego alfabetem. Język formalny jest generowany przez gramatykę formalną, przy czym ten sam język moŝe być generowany przez wiele gramatyk. PRZYKŁAD 1 <zdanie> ::= <podmiot> <orzeczenie> <podmiot>::= kwiaty gwiazdy <orzeczenie>::= kwitną świecą Zdania wyprowadzone z tej gramatyki: kwiaty kwitną gwiazdy świecą gwiazdy kwitną kwiaty świecą 3

Notacja BNF (Backus-Naur-Form) Symbol początkowy: <zdanie>, symbole pomocnicze (nieterminalne): <zdanie>, <podmiot>, <orzeczenie>; symbole końcowe (terminalne): kwiaty, gwiazdy, kwitną, świecą; metasymbole notacji BNF: <, >, ::=, produkcje reguły, poprzez które moŝna zdefiniować język. PRZYKŁAD 1 S ::= A B A ::= x y B ::= z w Zdania wyprowadzone z gramatyki: xz, yz, xw, yw. Stosując regułę kolejnych wyprowadzeń moŝna zdanie języka wyprowadzić z symbolu początkowego: S AB xb xw S AB yb yz S * yz 4

Gramatyka Chomsky ego matematyczna definicja języka 1. Język L = L(T,N,P,S) jest definiowany przez: T słownik symboli końcowych; N zbiór symboli pomocniczych (kategorii gramatycznych); P zbiór produkcji (reguł syntaktycznych); S symbol początkowym, naleŝący do N, nazywany teŝ głową języka. Gramatyka Chomsky ego, cd. 2. Język L(T,N,P,S) jest zbiorem ciągów symboli końcowychξ, które mogą być wyprowadzone z S zgodnie z podaną poniŝej regułą 3. L = {ξ S ξ i ξ T*} gdzie: litery greckie oznaczają ciągi symboli, T* oznacza zbiór wszystkich ciągów symboli z T. 5

Gramatyka Chomsky ego, cd. 3. Ciąg δ n moŝe być wyprowadzony z ciągu δ 0 wtedy i tylko wtedy, gdy istnieją ciągi δ 1, δ 2,., δ n-1 takie, Ŝe kaŝdy ciąg δ i moŝe być bezpośrednio wyprowadzony z δ i-1 zgodnie z podaną poniŝej regułą 4. (δ 0 δ n ) ((δ i-1 δ i ) dla i = 1,, n) Gramatyka Chomsky ego, cd. 4. Ciąg η moŝe być bezpośrednio wyprowadzony z ciągu ξ wtedy i tylko wtedy gdy istnieją ciągi α, β, ξ, η takie, Ŝe: a) ξ =αξ β b) η =αη β c) P zawiera produkcję ξ ::= η 6

PRZYKŁAD 2 Gramatyka, w której za pomocą rekursji moŝna wyprowadzić nieskończenie wiele zdań za pomocą skończonego zbioru produkcji. S ::= xa A ::= z ya Zbiór zadań jakie mogą być wyprowadzone z symbolu początkowego S: xz xyz xyyz xyyyz.. PRZYKŁAD Gramatyka, za pomocą której moŝna zdefiniować liczby całkowite: <liczba całkowita> ::= <cyfra> <cyfra> ::= 0 1 2 3 4 5 6 7 8 9 <liczba całkowita><cyfra> 7

Hierarchia Chomsky ego Hierarchia Chomsky ego dzieli języki na cztery typy. typ 0 języki rekursywnie przeliczalne języki rekursywne typ 1 języki kontekstowe typ 2 języki bezkontekstowe typ 3 języki regularne Języki regularne Języki regularne języki formalne generowane przez wyraŝenia regularne, tzn. definiowane za pomocą produkcji o postaci: A ::= a A ::= ab A ::= ε gdzie: A N, B N, a T 8

Języki bezkontekstowe i kontekstowe Język bezkontekstowy język formalny zdefiniowany przez zbiór produkcji bezkontekstowych, tzn. produkcji o postaci: A ::= ξ i (A N, ξ (N T)*) Język kontekstowy język formalny zdefiniowany przez zbiór produkcji o postaci: αaβ:: = αξβ dla niepustego ξ Języki rekursywne i rekursywnie przeliczalne Język rekursywny język formalny, dla którego istnieje algorytm rozstrzygający, czy dany łańcuch naleŝy do tego języka, czy nie. Język rekursywnie przeliczalny język formalny, dla którego istnieje algorytm decydujący, czy dany łańcuch naleŝy do tego języka, czy nie; przy tym algorytm ten musi zakończyć działanie z odpowiedzią pozytywną dla łańcuchów naleŝących do języka, zaś dla łańcuchów spoza języka moŝe dać odpowiedź negatywną lub w ogóle nie dać odpowiedzi. 9

Analiza zdań Analiza polega na rozbiorze struktur zdaniowych i zdań. Zadaniem teorii analizy składniowej jest opracowanie algorytmów rozbioru języka o skomplikowanych regułach strukturalnych. Rozbiór zstępujący Top down Rozbiór zstępujący lub generacyjny (ang. Top down) polega na wyznaczeniu kroków generacyjnych od symbolu początkowego do zdania końcowego. 10

Przykład 1 <zdanie> ::= <podmiot> <orzeczenie> <podmiot>::= kwiaty gwiazdy <orzeczenie>::= kwitną świecą Czy zdanie "gwiazdy świecą" naleŝy do języka? <zdanie> <podmiot><orzeczenie> gwiazdy świecą gwiazdy świecą gwiazdy <orzeczenie> gwiazdy świecą <orzeczenie> świecą świecą świecą - - - - - - Przykład 2 S ::= xa A ::= z ya Czy zdanie "xyyz" naleŝy do języka? S xyyz xa xyyz A yyz ya yyz A yz ya yz A z z z -- -- 11

Przykład 3 S:: = A B A:: = xa y B:: = xb z Dokonaj rozbioru zdania "xxxz" S A xa A xa A xa A xxxz xxxz xxxz xxz xxz xz xz z Gramatyki klasy LL(1) REGUŁA 1: Dla zadanej gramatyki: A:: = ξ 1 ξ 2 ξ n zbiory pierwszych symboli w zdaniach, które mogą być wyprowadzone z ξ i muszą być rozłączne, tzn. pierw(ξ i ) pierw(ξ j ) = dla wszystkich i j. 12

Gramatyki klasy LL(1) Zbiór pierw(ξ) jest zbiorem wszystkich symboli końcowych, które mogą wystąpić na pierwszej pozycji w zdaniach wyprowadzonych z ξ. Zbiór ten moŝe być wyznaczony według następujących reguł: 1. jeśli pierwszy symbol argumentu jest symbolem końcowym, to pierw(aξ) = {a} 2. jeśli pierwszy symbol jest symbolem pomocniczym i istnieje produkcja A::= α 1 α 2 α n to pierw(aξ)=pierw(α 1 ) pierw(α 2 ) pierw(α n ) Przykład 3 S:: = A B A:: = xa y B:: = xb z S:: = C xs C:: = y z Dokonaj rozbioru zdania "xxxz" S xxxz xs xxxz S xxz xs xxz S xz xs xz S z C z z z -- -- 13

Lewostronna faktoryzacja Produkcję postaci: A:: = αξ 1 αξ 2 αξ n naleŝy zastąić produkcjami: A :: = αa A :: = ξ 1 ξ 2 ξ n Przykład 4 Dana jest gramatyka: S :: = Ax A :: = x ε gdzie: ε - pusty ciąg symboli. Dokonaj rozbioru zdania "x" S x Ax x xx x x -- 14

Gramatyki klasy LL(1) REGUŁA 2: Dla kaŝdego symbolu A N, z którego moŝna wyprowadzić pusty ciąg symboli (A ε), zbiór jego pierwszych symboli musi być rozłączny ze zbiorem symboli, które mogą następować po dowolnym ciągu wyprowadzonym z A, tzn. pierw(a) nast(a) = Gramatyki klasy LL(1) Zbiór nast(a) wyznacza się następująco: dla kaŝdej produkcji P i postaci: X :: = ξaη przez S i oznaczamy pierw(η i ); suma wszystkich zbiorów S i tworzy zbiór nast(a). Jeśli z co najmniej jednegoη i moŝemy wyprowadzić pusty ciąg symboli, to zbiór nast(x) musi być równieŝ włączony do nast(a). 15

Rekurencja Produkcja: A :: = B AB opisuje zbiór ciągów: B, BB, BBB, Jej uŝycie zgodnie z regułą 1 jest niedozwolone, poniewaŝ: pierw(b) pierw(ab) = pierw(b) Rekurencja Produkcja: A :: = ε AB opisuje zbiór ciągów: ε, B, BB, BBB, Jej uŝycie zgodnie z regułą 2 jest niedozwolone, poniewaŝ: pierw(a) = pierw(b) a zatem pierw(a) nast(a). 16

Eliminacja lewostronnej rekurencji I i II Reguła gramatyczna nie pozwalają na stosowanie definicji lewostronnie rekurencyjnych. Problem ten moŝna rozwiązać poprzez: zamianę rekurencji lewostronnej na prawostronną A :: = ε BA zastąpienie rekursji iteracją. Zapis {B} w notacji EBNF oznacza iterację czyli powtórzenie symbolu B zero, jeden, dwa,... lub nieskończenie wiele razy. Produkcja: A :: = {B} opisuje zbiór ciągów: ε, B, BB, BBB, Przykład 5 Dana jest gramatyka: S :: = A S - A A :: = a b c a b c = ((a b) c) gdzie: {a, b, c, -} T S :: = A A - S A :: = a b c (a (b c)) Te dwie gramatyki nie są równowaŝne semantycznie 17

Eliminacja lewostronnej rekurencji Produkcję postaci: A :: = Aα 1 Aα 2 Aα n β 1 β 2 β m moŝna zastapić produkcjami: A:: = β 1 A β 2 A β m A A :: = α 1 A α 2 A α n A ε Przykład 5 Dana jest gramatyka: S :: = A S - A A :: = a b c S :: = A { A} A :: = a b c S :: = A S S ::= -AS ε A :: = a b c a b c = ((a b) c) a b c a b c Te gramatyki są równowaŝne semantycznie 18

Drzewo wyprowadzeń Drzewo wyprowadzeń jest to hierarchiczna struktura, która reprezentuje w sposób graficzny wyprowadzenie zdania z gramatyki. Korzeń drzewa ma etykietę głowy języka. Gałęzie są symbolami pomocniczymi, a liście symbolami końcowymi lub pustymi. Struktura gałęzi reprezentuje produkcje. Gałąź główna ma etykietę lewej strony produkcji, a gałęzie z niej wyprowadzone etykiety prawej strony produkcji w kolejności od strony lewej do prawej. Przykład 6 NaleŜy wyprowadzić liczbę 123.456 z gramatyki: <liczba rzeczywista> :: = <część całkowita>. <ułamek> <część całkowita> :: = <cyfra> <część całkowita> <cyfra> <ułamek> :: = <cyfra> <cyfra> <ułamek> <cyfra> :: = 0 1 2 3 4 5 6 7 8 9 19

Niejednoznaczność składni. Problem niejednoznaczności gramatyki, występuje wtedy, gdy generuje ona zdania, które mają więcej niŝ jedno drzewo wyprowadzeń. Przykład 7 NaleŜy wyprowadzić zdanie 1-0 - 1 dla gramatyki: E:: = E E 0 1 E E E - E E - E LUB E - E 1 1 E - E 1 0 0 1 Dla zdania 1-0 -1 moŝna narysować dwa róŝne drzewa wyprowadzeń. 20

Przykład 8 Kolejna niejednoznaczność występuje w języku C i Pascal dla instrukcji warunkowej IF. Jest ona spowodowana wystąpieniem produkcji: S :: = if E then S S :: if E then S else S Pascal Dla zdania if E 1 then if E 2 then S 1 else S 2 moŝna wyprowadzić dwa róŝne drzewa. if E 1 then if E2 then S1 else S2 1) S if E then S E 1 if E then S else S E 2 S 1 S 2 2) S if E then S else S E 1 S 2 if E then S E 2 S 1 21

Eliminacja niejednoznaczności if-else Problemem niejednoznaczności if-else w językach Pascal i C został rozwiązany w ten sposób, Ŝe słowo kluczowe else jest kojarzone z najbliŝej występującym słowem kluczowym if. W tym przypadku rozpatrywane zdanie będzie interpretowane tak jak przedstawia to drzewo 1. Eliminacja niejednoznaczności if-else w języku Modula-2 S ::= <empty> stmt if E then SL end if E then SL else SL end SL ::= SL; S S Pascal: if E 1 then if E 2 then S 1 else S 2 Modula-2: 1 o. if E 1 then if E 2 then S 1 else S 2 end end 2 o. if E 1 then if E 2 then S 1 end else S 2 end 22

Pascal i Modula-2 if E 1 then S 1 Pascal: else if E 2 then S 2 else if E 3 then S 3 else S 4 if E 1 then S 1 Modula-2: else if E 2 then S 2 else if E 3 then S 3 else S 4 end end end Modula-2 if E 1 then S 1 elsif E 2 then S 2 end elsif E 3 then S 3 else S 4 S ::= if E then SL { elsif E then SL } [else SL] end SL ::= SL; S S 23

Zestawienie oznaczeń stosowanych w notacji BNF oraz w jej zmodyfikowanej wersji - MBNF ZAPIS W MBNF ZNACZENIE ZAPIS W BNF (EBNF) 1 = jest zdefiniowane jako ::= 2 lub 3. zakończenie formuły brak jawnego oznaczenia 4 [x] 0 lub jednokrotne powtórzenie nie uŝywa się metasymboli [ ] napisu x 5 {x} 0 lub wielokrotne powtórzenie {x} w EBNF napisu x 6 (x y... z) dowolny z napisów: x, y,,z nie uŝywa się metasymboli ( ) 7 "a" symbol terminalny nie ujmuje się w cudzysłów (z alfabetu języka) 8 ciąg-małych-liter symbol nieterminalny (zmienna metajęzykowa) zmienne ujmuje się w nawiasy ostre, nie ogranicza się do małych liter i niekoniecznie uŝywa się łącznika między wyrazami Separatory i terminatory Separatory oddzielają elementy Terminatory pojawiają się za kaŝdym elementem, np. zdaniem S ::= <empty> stmt begin SL end SL ::= SL; S S Pascal: Pascal: begin S 1 ; S 2 ; S 3 end begin S 1 ; S 2 ; S 3 ; end begin ;S 1 ;;;; S 2 ; S 3 ;; end 24

Instrukcja pusta S ::= <empty> Pascal: stmt if E then S if E then S else S begin SL end while E do S SL ::= SL; S S S ::= <empty> Modula-2: stmt if E then SL end if E then SL else SL end begin SL end while E do SL end SL ::= SL; S S Pascal: if E then ; S 1 ; - błąd semantyczny if E then S 1 ; else S 2 ; - błąd syntaktyczny Modula-2: if E then S 1 ; S 2 end if E then S 1 ; S 2 else S 3 ; S 4 end 25