Analiza składniowa – struktura, definicje
Transkrypt
Analiza składniowa – struktura, definicje
J zyki formalne i kompilatory Modyfikacja: 2005-01-01 Analiza składniowa – struktura, definicje PobieranieZnaków Gramatyki bezkontekstowe Przykłady wyprowadze Analizator Leksykalny Struktura analizatora składniowego Zbiory „lookahead”, „first” i „follow” Gramatyka bezkontekstowa PobieranieSymboli Analizator Składniowy J zyki formalne i kompilatory, © by Michał miałek Gramatyki bezkontekstowe Gramatyka jest gramatyk bezkontekstow , je li wszystkie jej produkcje maj form : A , gdzie A jest symbolem nieterminalnym (nale y do zbioru , a nale y do zbioru ( U )* Zwró my uwag , e to oznacza mo liwo istnienia produkcji o postaci A , inaczej: produkcji pustej Poznamy 2 rodzaje gramatyk bezkontekstowych - gramatyki LL i LR. Obydwa rodzaje gramatyk umo liwiaj przetwarzanie zdania wej ciowego od lewej do prawej strony (st d pierwsze L). Gramatyki LL umo liwiaj analiz składniow od góry w dół zaczynamy od symbolu startowego i dochodzimy do zdania ko cowego poprzez lewostronne (L) wyprowadzenie Gramatyki LR umo liwiaj analiz składniow z dołu do góry zaczynamy od zdania ko cowego i dochodzimy do symbolu startowego poprzez prawostronne (R) wyprowadzenie J zyki formalne i kompilatory Analiza składniowa - struktura, definicje © by Michał miałek 1 J zyki formalne i kompilatory Modyfikacja: 2005-01-01 Wyprowadzenie dla gramatyki bezkontekstowej Przykładowy zbiór produkcji dla gramatyki bezkontekstowej: S sta B stp B D,B B E;B D defv : id D defc : n E add E mul E S to symbol startowy, {S, B, D, E} to zbiór symboli nieterminalnych, {sta, stp, defv, defc, :, n, add, mul} to zbiór symboli terminalnych Wyprowadzenie zdania polega na kolejnym stosowaniu produkcji. Je eli w produkcji napotykamy na symbol nieterminalny, rozwijamy go stosuj c odpowiedni produkcj (patrz wyprowadzenie podczas wykładu). J zyki formalne i kompilatory © by Michał miałek Sprawdzanie składni zdania We my zdanie: sta defv : id , ; mul ; stp Jak sprawdzi , czy jest to poprawne zdanie w j zyku zdefiniowanym gramatyk z poprzedniego slajdu? Nale y zacz od symbolu startowego, stosuj c odpowiedni produkcj . Przetwarzaj c produkcj porównujemy symbole terminalne w produkcji z napotykanymi w zdaniu kolejnymi symbolami. Je eli w produkcji napotykamy na symbol nieterminalny – stosujemy odpowiedni produkcj . Je eli istnieje kilka produkcji, których lew stron stanowi dany symbol nieterminalny, dokonujemy wyboru na podstawie piwerwszego znaku produkcji. Pytanie: czy dla wszystkich gramatyk bezkontekstowych mo na zastosowa powy sz procedur ? J zyki formalne i kompilatory Analiza składniowa - struktura, definicje © by Michał miałek 2 J zyki formalne i kompilatory Modyfikacja: 2005-01-01 Struktura analizatora LL(1) Analizator składniowy pobiera leksemy, sprawdza składni i przekazuje informacje steruj ce generatorem kodu. Analizator powinien zna wszystkie produkcje i posiada stos. «interface» «interface» PobieranieSymboli + + Translacja PodajSymbol() : LekSem Rozpocznij(String) : void + Przetłumacz(String) : void «realize» typ: int «interface» LekSem Zarz dca Analizatora Składniowego + GeneracjaKodu + DodajW zeł(W zeł) : void + Generuj(String) : void Przetłumacz(String) : void Tablica Produkcj i Stos Produkcj i Analizator LL + Przetłumacz(String) : void J zyki formalne i kompilatory © by Michał miałek Tablica i stos produkcji Produkcje gramatyki bezkontekstowej zawieraj jeden symbol terminalny po lewej stronie i ci g symboli po lewej. Zarz dca Analizatora Składniowego Analizator LL - symbol_startowy: int + Przetłumacz(nazwa :String) : void Stos Produkcj i Tablica Produkcj i + + + + wstaw(p :Produkcja) : void znajd _produkcj (symbol_nieterm :int, symbol_term :int) : Produkcja -aktualna 1..* +nast pny Symbol Produkcj i + typ: int -głowa 1 +aktualny J zyki formalne i kompilatory Analiza składniowa - struktura, definicje wstaw(p :Produkcja) : void wyjmij() : Produkcja 0..* Produkcj a - symbol_lewej_strony: int + + + rozpocznij() : void przejd _do_nast pnego() : int sprawd (symbol_term :int) : boolean © by Michał miałek 3 J zyki formalne i kompilatory Modyfikacja: 2005-01-01 Zbiór „first” Zbiór „first” zawiera te symbole terminalne, które mog si znale na pocz tku produkcji. Definicja (rekurencyjna): first(a ) = {a} first(A) = {a: (A gdzie: a ,A , ( P; a first( )} )*, P jest zbiorem produkcji Zwró my uwag , e: first( ) = { } first(A ) = first(A), gdy = (first(A) – { }) first(A) first( ), gdy first(A) J zyki formalne i kompilatory © by Michał miałek Zbiór „follow” Zbiór „follow” zawiera te symbole terminalne, które mog si znale po symbolu nieterminalnym we wszystkich produkcjach. Definicja: follow(A) = {a: X, , (X gdy first( ) follow(A) = {a: X, , (X a ( (first( ) – { follow(S) = (jak wy ej) { } gdzie: a , A,X , , J zyki formalne i kompilatory Analiza składniowa - struktura, definicje A Pia first( ) ) }, A Pi }) follow(X) ) }, gdy ( first( ) )*, P jest zbiorem produkcji © by Michał miałek 4 J zyki formalne i kompilatory Modyfikacja: 2005-01-01 Zbiór „lookahead”, gramatyka LL(1) Zbiór „lookahead” dotyczy konkretnej produkcji. Okre la on, pod wpływem jakich symboli terminalnych nale y zastosowa t produkcj . Definicja: lookahead(A ) = first( ), gdy = (first( ) – { )) first(A) follow(A), gdy first(A) Gramatyka jest LL(1), gdy zbiory „lookahead” dla produkcji z t sam lew stron – s rozł czne. J zyki formalne i kompilatory © by Michał miałek Sprawdzanie gramatyki LL Aby sprawdzi , czy gramatyka jest LL(1) nale y porówna zbiory lookahead dla tych produkcji, które posiadaj identyczne lewe strony. Dla podanej na pocz tku gramatyki nale y sprawdzi produkcje: B D,B B E;B D defv : id D defc : n E add E mul E Jakie s zbiory lookahead dla tych produkcji. Czy zbiory lookahead s wzajemnie rozł czne? J zyki formalne i kompilatory Analiza składniowa - struktura, definicje © by Michał miałek 5