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

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

Zadanie analizy leksykalnej

Program We Kompilator Wy Źródłowy

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

Matematyczne Podstawy Informatyki

Języki programowania zasady ich tworzenia

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

Analizator syntaktyczny

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Metody Kompilacji Wykład 1 Wstęp

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

Analiza leksykalna i generator LEX

KONSTRUKCJA KOMPILATORÓW

Podstawy Kompilatorów

Generatory analizatorów

L E X. Generator analizatorów leksykalnych

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

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

Elementy języków programowania

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Gramatyki atrybutywne

Programowanie w języku Python. Grażyna Koba

Laboratorium 10: Maszyna stanów

Algorytmy od problemu do wyniku

Translacja wprowadzenie

Metody kompilacji Wykłady 4-5

ForPascal Interpreter języka Pascal

Algorytmika i Programowanie VBA 1 - podstawy

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};

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

1 Podstawy c++ w pigułce.

Semantyka i Weryfikacja Programów - Laboratorium 6

Podstawy i języki programowania

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Wprowadzenie do programowania w VBA

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

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

1 Podstawy c++ w pigułce.

Wstęp do programowania. Różne różności

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

Definicje. Algorytm to:

Informatyka 1. Przetwarzanie tekstów

Warsztaty dla nauczycieli

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Wstęp do programowania

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Generator skanerów Flex

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

Zapis algorytmów: schematy blokowe i pseudokod 1

Podstawy Informatyki Języki programowania c.d.

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

Wykład 14. Środowisko przetwarzania

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

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

Podstawy programowania w języku C

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Pascal - wprowadzenie

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

JIP. Analiza składni, gramatyki

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

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

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Podstawy Kompilatorów

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Instrukcja warunkowa i wyboru

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

Języki formalne i techniki translacji

System operacyjny Linux

1 Przygotował: mgr inż. Maciej Lasota

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

Podstawy programowania skrót z wykładów:

Język programowania PASCAL

Wykład 6. Wyszukiwanie wzorca w tekście

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Język ludzki kod maszynowy

Podstawy Programowania. Wykład 1

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Powtórka algorytmów. Wprowadzenie do języka Java.

Obsługa klawiszy specjalnych

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

Laboratorium z użyciem analizatora leksykalnego FLEX

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Podstawy programowania - 1

Uproszczony schemat działania kompilatora

Przyczyny dwustopniowego tłumaczenia

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy generatora YACC. Bartosz Bogacki.

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Błędy leksykalne są na ogół nietrudne do znalezienia.

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Wyrażenia regularne. Wyrażenia regularne 1/41

Programowanie w Ruby

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Transkrypt:

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

Zadanie analizy leksykalnej Kod źródłowy (ciąg znaków) Analizator leksykalny SKANER Ciąg symboli leksykalnych (tokenów) 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

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 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 id relop num

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).

Definicje regularne d i r i 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 d 1, 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

Diagramy przejść (1) Liczba bez znaku w Pascalu cyfra + (. cyfra + )? ( (e E) (+ )? cyfra + )? inne cyfra cyfra cyfra cyfra cyfra e +. cyfra cyfra E inne e E inne

Diagramy przejść (2) Operatory relacyjne w Pascalu < <= <> = >= > > = < inny = > = inny

Diagramy przejść (3) Identyfikatory litera ( litera cyfra )* litera cyfra litera inny oddaj ostatni przeczytany symbol na wejscie; 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ą pozycje i wpisz identyfikator do tablicy symboli.