Zadanie analizy leksykalnej

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

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

Program We Kompilator Wy Źródłowy

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk

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

Gramatyki atrybutywne

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

Języki programowania zasady ich tworzenia

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Generatory analizatorów

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Analiza leksykalna i generator LEX

Analizator syntaktyczny

Translacja wprowadzenie

Gramatyka operatorowa

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Metody Kompilacji Wykład 1 Wstęp

KONSTRUKCJA KOMPILATORÓW

Matematyczne Podstawy Informatyki

Podstawy Kompilatorów

Programowanie w języku Python. Grażyna Koba

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

L E X. Generator analizatorów leksykalnych

JIP. Analiza składni, gramatyki

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Metody kompilacji Wykłady 4-5

Semantyka i Weryfikacja Programów - Laboratorium 6

Uproszczony schemat działania kompilatora

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

Uproszczony schemat działania kompilatora

Podstawy Informatyki Języki programowania c.d.

ForPascal Interpreter języka Pascal

Elementy języków programowania

Laboratorium 10: Maszyna stanów

Efektywna analiza składniowa GBK

Wykład 5. Jan Pustelnik

Algorytmika i Programowanie VBA 1 - podstawy

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Algorytmy od problemu do wyniku

Metody Kompilacji Wykład 13

Języki formalne i automaty Ćwiczenia 3

Paradygmaty i języki programowania. Analiza leksykalna Skaner, RE, DAS, NAS, ε- NAS

Języki formalne i automaty Ćwiczenia 9

Programowanie w języku C++ Grażyna Koba

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

Języki Programowania. Elementy języków programowania. Wojciech Sobieski

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Przyczyny dwustopniowego tłumaczenia

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Hierarchia Chomsky ego Maszyna Turinga

Programowanie w Turbo Pascal

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Generator skanerów Flex

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

Języki formalne i automaty Ćwiczenia 1

Interpreter - EasyCompile

Metody Kompilacji Wykład 3

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Matematyczne Podstawy Informatyki

Symbol, alfabet, łańcuch

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

1 Podstawy c++ w pigułce.

Wprowadzenie do kompilatorów

Wstęp do programowania

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona?

Języki formalne i automaty Ćwiczenia 6

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Metodologie programowania

Podstawy generatora YACC. Bartosz Bogacki.

Definicje. Algorytm to:

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

1 Podstawy c++ w pigułce.

Obiektowa implementacja parsera klasy LL(1)

JĘZYKI FORMALNE I METODY KOMPILACJI

Zapis algorytmów: schematy blokowe i pseudokod 1

Języki formalne i gramatyki

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

JĘZYKIFORMALNE IMETODYKOMPILACJI

Języki formalne i techniki translacji

Gramatyki regularne i automaty skoczone

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Lingwistyka Matematyczna Języki formalne i gramatyki Analiza zdań

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

System operacyjny Linux

Gramatyki rekursywne

3.4. Przekształcenia gramatyk bezkontekstowych

Języki formalne i automaty Ćwiczenia 8

Warsztaty dla nauczycieli

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Języki formalne i automaty Ćwiczenia 4

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

10. Translacja sterowana składnią i YACC

Analiza semantyczna. Gramatyka atrybutywna

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Transkrypt:

Analiza leksykalna 1 Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Zadanie analizy leksykalnej Przykład: We: COST := ( PRICE + TAX ) * 0.98 Wy: id 1 := ( id 2 + id 3 ) * num 4 Tablica symboli: Adres Nazwa/wartość Charakter Dodatkowa informacja 1 COST zmienna. 2 PRICE zmienna. 3 TAX zmienna. 4 0.98 stała.

Zadanie analizy leksykalnej Przykład: We: COST:= ( PRICE + TAX ) * 0.98 Wy: id 1 := ( id 2 + id 3 ) * num 4 Wyjście skanera: <= Wejście skanera: (id, 1) COST (equ, ) := (left-par, ) ( (id, 2) PRICE (plus, ) + (id, 3) TAX (right-par, ) ) (mult, ) * (num, 4) 0.98 Współpraca z parserem

Architektura kompilatora (1) a) Realizacja szeregowa Program źródłowy SKANER PARSER... program wynikowy - translator wieloprzebiegowy - translator nakładkowy - mniejsza zajętość PaO - dłuŝszy czas kompilacji Architektura kompilatora (2) b) Realizacja równoległa PARSER Program źródłowy SKANER Generator Optymalizator - translator jednoprzebiegowy - większa zajętość PaO - krótszy czas kompilacji podprogram podprogram program wynikowy

Zadania analizatora leksykalnego Zadania analizatora leksykalnego: wyodrębnianie symboli leksykalnych (tokenów) ignorowanie komentarzy ignorowanie białych znaków (spacji, tabulacji, znaków nowej linii ) korelowanie błędów zgłaszanych przez kompilator z numerami linii tworzenie kopii zbioru wejściowego (źródłowego) łącznie z komunikatami o błędach czasami realizacja funkcji preprocessingu, rozwijanie makrodefinicji Rozdzielenie etapu analizy na dwie odrębne funkcje: analizę leksykalną i analizę syntaktyczną sprawia, Ŝe jedna i druga mogą być wykonywane przy uŝyciu bardziej efektywnych algorytmów, gdyŝ algorytmy te istotnie się róŝnią, wykorzystując inne pryncypia formalne i realizacyjne. Podstawowe pojęcia: token, leksem, wzorzec Przykład: const pi2=6.2832; token leksem wzorzec (pattern) const (słowo kluczowe) const const ws biały_znak + id pi2 litera (litera cyfra)* relop = < > <= >= = <> num 6.2832 cyfra + (. cyfra + )? ((E e) (+ )? cyfra + )? źródło: const pi2=6.2832 leksemy: const pi2 = 6.2832 tokeny: const ws id relop num

Podział gramatyki G opisującej dany język programowania Gramatyka G języka źródłowego (najczęściej bezkontekstowa): G= V, Σ, P, S gdzie na ogół: Σ= A, B,..., Z, a, b,..., z,0,1,...,9, +,,*, /,.,(,),... { } Przebudowujemy gramatykę G na rodzinę gramatyk: G = V, Σ, P, S - gramatyka syntaktyczna S S S S S { jest_tokenem} Σ = Σ Σ - tokeny są terminalami w gramatyce S Si Si syntaktycznej G = V, Σ, P, S - gramatyki leksykalne, jedna dla kaŝdego tokenu i i i i i i-ty token S i =Σ S i Σ, Si leksykalnej. Vi Σi Σ Σ jest symbolem początkowym (nieterminalem) i-tej gramatyki S i Podział gramatyki G opisującej dany język programowania Podział gramatyki języka źródłowego G= V, Σ, P, S Gramatyka syntaktyczna: G = V, Σ, P, S S S S S S Rodzina gramatyk leksykalnych G = V, Σ, P, S po jednej dla kaŝdego tokenu S n V = V V n Σ= Σ i= 1 i i i= 1 n P= P S P i=1 i i i i i i S = S S Gramatyka języka źródłowego G jest więc efektem podstawienia gramatyk leksykalnych G do gramatyki syntaktycznej G. i S

Podział gramatyki G opisującej dany język programowania token leksem wzorzec (pattern) const (słowo kluczowe) const const ws biały_znak + id pi2 litera (litera cyfra)* relop = < > <= >= = <> num 6.2832 cyfra + (. cyfra + )? ((E e) (+ )? cyfra + )? Wzorce są opisami sposobu wyodrębniania tokenów. Wzorce pełnią rolę produkcji w gramatykach leksykalnych. Tokeny są symbolami nieterminalnymi w gramatykach leksykalnych. Tokeny są terminalami w gramatyce syntaktycznej. Przykład: Trudności w budowaniu analizatora leksykalnego W niektórych językach programowania słowa kluczowe nie są zastrzeŝone (FORTRAN, PL/I). W języku PL/I poprawny jest zapis: IF THEN THEN THEN = ELSE ; ELSE ELSE = THEN;

Trudności w budowaniu analizatora leksykalnego Przykład: W języku FORTRAN spacje (z wyjątkiem spacji wewnątrz łańcuchów) są zawsze ignorowane. Nazwy zmiennych nie wymagają deklaracji. Typ zmiennej ustalany jest na podstawie pierwszej litery nazwy. Porównujemy: 1) DO 5 I = 1. 25 równoznaczne DO5I = 1.25 (instrukcja przypisania, DO5I zmienna rzeczywista) 2) DO 5 I = 1, 25 instrukcja pętli wyliczanej typu "for", odpowiednik: for I := 1 to 25 do begin...... etykieta... 5: end; Przykład c.d.: 1) Trudności w budowaniu analizatora leksykalnego DO5I = 1.25 identyfikator operator przypisania stała numeryczna 2) wyraŝenia (tutaj stałe) DO 5 I = 1, 25 słowo kluczowe etykieta operator przecinek DO przypisania identyfikator zmiennej sterującej pętli

Trudności w budowaniu analizatora leksykalnego Przykład c.d.:. DO 5 I = 1 \n ' Po przeczytaniu znaków DO nie moŝna dokonać uzgodnienia tokenu "Słowo kluczowe DO" dopóki nie zbada się prawego kontekstu i nie znajdzie się przecinka (wtedy rzeczywiście uzgadnia się "DO") lub kropki bądź znaku nowej linii (wtedy mamy instrukcje podstawienia). d i r i Definicje regularne Do opisu wzorców dla skanera stosujemy definicje regularne: d r d 1 2 1 r 2... d n r n gdzie: - unikalna nazwa - wyraŝenie regularne nad symbolami alfabetu Σ { d1, d2,..., di 1}

Przykład definicji regularnych (1) Stałe bez znaku w Pascal u: cyfra 0 1 2 3 4 5 6 7 8 9 cyfry cyfra cyfra * część-ułamkowa. cyfry ε wykładnik ( E e ) ( + ε ) cyfry ε num cyfry część-ułamkowa wykładnik Rozszerzenie zbioru operatorów Dla ułatwienia wprowadza się nowe operatory w wyraŝeniach regularnych, np.: w + - oznacza jedno lub więcej wystąpień wzorca w w + = w w* w? - oznacza zero lub jedno wystąpienie wzorca w w? = w ε

Przykład definicji regularnych (2) Stałe bez znaku w Pascal u zapisane po rozszerzeniu zbioru operatorów w wyraŝeniach regularnych: cyfra 0 1 2 3 4 5 6 7 8 9 cyfry cyfra + część-ułamkowa (. cyfry )? wykładnik ( ( E e ) ( + )? cyfry )? num cyfry część-ułamkowa wykładnik Rozpoznawanie tokenów Przykładowa gramatyka syntaktyczna: stmt if expr then stmt if expr then stmt else stmt ε expr term relop term term term id num Definicje regularne: delim \t \n ws delim + letter a b... z A B... Z digit 0 1... 9 if if then then else else relop < <= <> > >= = id letter ( letter digit ) * num digit + (. digit + )? ( E ( + )? digit + )?

Skaner ma rozpoznawać token atrybut tokenu ws - - if if - then then - else else - id id wskaźnik do tablicy symboli num num wskaźnik do tablicy symboli < relop LT <= relop LE <> relop NE = relop EQ > relop GT >= relop GE Diagramy przejść (1) Liczba bez znaku w Pascalu tokennum cyfra + (. cyfra + )? ( (e E) (+ )? cyfra + )?

Diagramy przejść (2) Operatory relacyjne w Pascalu tokenrelop < <= <> = >= > Identyfikator tokenid litera ( litera cyfra )* Diagramy przejść (3) oddaj ostatni przeczytany symbol na wejście; sprawdź, czy leksem to słowo kluczowe; jeśli tak zwróć odpowiednie słowo kluczowe; jeśli nie sprawdź, czy identyfikator jest juŝ w tablicy symboli; jeśli jest zwróć adres jego pozycji; jeśli nie ma utwórz nową pozycję, wpisz identyfikator do tablicy symboli i zwróć wskaźnik.

Identyfikatory litera ( litera cyfra )* Diagramy przejść (4) oddaj ostatni przeczytany symbol na wejście; sprawdź, czy leksem to słowo kluczowe... Nie zawsze stosuje się metodę umieszczania słów kluczowych w tablicy i sprawdzania kaŝdego identyfikatora, czy nie jest on słowem kluczowym. MoŜna budować dla słów kluczowych odrębne wzorce i konstruować automaty rozpoznające. Wówczas jednak liczba stanów analizatora gwałtownie rośnie. Diagramy przejść ignorowanie białych znaków delim delim other * cofnij ostatni przeczytany znak na wejście; Ŝadna inna akcja analizatora nie jest podejmowana