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

Podobne dokumenty
Matematyczne Podstawy Informatyki

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

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

Języki formalne i automaty Ćwiczenia 7

Zadanie analizy leksykalnej

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

Języki formalne i automaty Ćwiczenia 6

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

Języki formalne i automaty Ćwiczenia 9

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

ZADANIA Z AUTOMATU SKOŃCZONEGO SPRAWOZDANIE NR 4

Matematyczne Podstawy Informatyki

Jaki język zrozumie automat?

Rozwiązania około dwustu łatwych zadań z języków formalnych i złożoności obliczeniowej i być może jednego chyba trudnego (w trakcie tworzenia)

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

Metody Kompilacji Wykład 1 Wstęp

Program We Kompilator Wy Źródłowy

Zadanie 1. Czy prawdziwa jest następująca implikacja? Jeśli L A jest językiem regularnym, to regularnym językiem jest też. A = (A, Q, q I, F, δ)

Generatory analizatorów

1 Automaty niedeterministyczne

AUTOMATY SKOŃCZONE. Automat skończony przedstawiamy formalnie jako uporządkowaną piątkę:

KONSTRUKCJA KOMPILATORÓW

Języki programowania zasady ich tworzenia

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

Symbol, alfabet, łańcuch

Hierarchia Chomsky ego Maszyna Turinga

Maszyna Turinga języki

L E X. Generator analizatorów leksykalnych

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

Języki formalne i automaty Ćwiczenia 1

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

złożony ze słów zerojedynkowych o długości co najmniej 3, w których druga i trzecia litera od końca sa

Definicje. Algorytm to:

Wyrażenia regularne.

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

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

1 Podstawy c++ w pigułce.

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

Teoretyczne podstawy informatyki

10. Translacja sterowana składnią i YACC

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

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Języki regularne, rozpoznawanie wzorców regularnych, automaty skończone, wyrażenia regularne

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Automat Moore a. Teoria układów logicznych

Matematyczne Podstawy Informatyki

Imię, nazwisko, nr indeksu

Translacja wprowadzenie

Podstawy i języki programowania

Podstawy generatora YACC. Bartosz Bogacki.

Semantyka i Weryfikacja Programów - Laboratorium 6

Dopełnienie to można wyrazić w następujący sposób:

1 Podstawy c++ w pigułce.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wyrażenie nawiasowe. Wyrażenie puste jest poprawnym wyrażeniem nawiasowym.

Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne

Definicja 2. Twierdzenie 1. Definicja 3

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

10110 =

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki

Logika binarna. Prawo łączności mówimy, że operator binarny * na zbiorze S jest łączny gdy (x * y) * z = x * (y * z) dla każdego x, y, z S.

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

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

Gramatyki regularne i automaty skoczone

JIP. Analiza składni, gramatyki

1 Wielokrotne powtarzanie tych samych operacji

Języki formalne i automaty Ćwiczenia 3

Podstawy Informatyki Maszyna Turinga

JĘZYKIFORMALNE IMETODYKOMPILACJI

Metody kompilacji Wykłady 4-5

Języki formalne i automaty Ćwiczenia 2

Wstęp do informatyki- wykład 2

Wprowadzenie do analizy leksykalnej. Bartosz Bogacki.

Wprowadzenie do kompilatorów

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Maszyna Turinga (Algorytmy Część III)

Lista zadań - Relacje

Obliczenia inspirowane Naturą

Języki, automaty i obliczenia

Arytmetyka liczb binarnych

TEORETYCZNE PODSTAWY INFORMATYKI

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

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

Podstawy Kompilatorów

Algorytm. a programowanie -

Analizator syntaktyczny

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Wyrażenia regularne. Wyrażenia regularne: składnia

3. Instrukcje warunkowe

Jerzy Nawrocki, Wprowadzenie do informatyki

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

JĘZYKI FORMALNE I METODY KOMPILACJI

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Język ludzki kod maszynowy

Języki formalne i automaty Ćwiczenia 4

Transkrypt:

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

Etapy pracy kompilatora Character stream [Lexical Analyzer] token stream [Syntax Analyzer] syntax tree [SemanFc Analyzer] syntax tree [Intermediate Code Generator] intermediate representafon [Machine- Independent Code OpFmizer] intermediate representafon [Code Generator] target- machine code [Machine- Dependent Code OpFmizer] target- machine code 26.02.2014 JIP- 2 2

Analizator leksykalny (AL), skaner Skaner pierwsza składowa kompilatora, która sprawdza czy można podzielić ciąg symboli wejściowych (program źródłowy) na jednostki leksykalne danego języka programowania, a więc na tzw. tokeny. Skaner nie zwraca uwagi na śmieci, typy, kolejność tokenów, niezadeklarowane nazwy, itd. Te zadania należą do analizatora składni Skaner nie ma pojęcia o grupowaniu i organizacji tokenów... 26.02.2014 JIP- 2 3

AL Tokeny są to klasy leksemów, a więc podstawowych elementów języka programowania. Np. stałe (int, double, char, string, itd) operatory (arytmetyczne, logiczne, relacyjne) znaki przestankowe słowa kluczowe języka 26.02.2014 JIP- 2 4

Schemat skanera while (i > 0)! i = i 1;! wejście: program źródłowy Analizator leksykalny Błędy Analizator rozpoznaje poszczególne elementy tokenów: 7 lub 2345 stałe całkowite jan lub lublin - - łańcuchy siedem lub abc zmienne Elementy te noszą nazwę leksemów i należą do różnych klas tokenów (znaczników). wyjście while ( i > 0 ) i = i - 1 ; 26.02.2014 JIP- 2 5

Budowa skanera Dwie metody realizacji wprost (skaner ad hoc) wykorzystanie wyrażeń regularnych i automatów skończonych Ad hoc: program oparty na pętli (loop) i przełącznikach (switch) loop&switch należy podać definicje tokenów czytać wejście z lewa na prawo analizować i jeśli OK wówczas wykonać odpowiedni skok w programie Metoda uciążliwa! 26.02.2014 JIP- 2 6

Deterministyczny Automat Skończony Przykład: przełącznik; dwa stany: początkowy, końcowy; funkcja przejścia. Zastosowania DAS: Analiza obwodów cyfrowych Analizator leksykograficzny (rozbija tekst na jednostki leksykograficzne) Skanowanie tekstu w celu wyszukiwania konkretnych słow (wyszukiwarki sieciowe) Weryfikacja systemów o skończonej liczbie stanów (transakcje elektroniczne w internecie) off naciśnij naciśnij on 26.02.2014 JIP- 2 7

DAS Przykład: Wyszukiwanie, modelowanie łańcucha (słowa) else start e l s e Ważną rolę w teorii automatów skończonych grają Gramatyki (parser, przetwarzanie wyrażeń, E- >E+E stwierdza, że wyrażenie można otrzymać z dwu wyrażeń połączonych znakiem plus; gramatyki bezkontekstowe) Wyrażenia regularne (wzorce danych tekstowych, reprezentujące łańcuchy; UNIX: [A- Z][a- z]*[ ][A- Z][a- z]*) 26.02.2014 JIP- 2 8

Podstawowe pojęcia Alfabet: Σ skończony, niepusty zbiór symboli Σ = {0, 1} alfabet binarny; Σ = {a, b,, z} zbiór małych liter Łańcuch, słowo skończony ciąg symboli wziętych z jakiegoś alfabetu Łańcuch pusty słowo o zerowej długości (można wybrać z każdego alfabetu) Długość słowa liczba symboli niepustych Potęgi alfabetu Σ k - - zbiór słów o długości k nad alfabetem Σ Σ 0 = {}, Σ 1 = {0, 1}, Σ 2 = {0, 1, 00, 01, 10, 11}, 26.02.2014 JIP- 2 9

Podstawowe pojęcia Konwencja Małe litery z początku alfabetu łac.: a, b, c - symbole Małe litery z końca alfabetu: w, x, y, z słowa, łańcuchy Zbiór wszystkich łańcuchów nad Σ oznaczamy przez Σ * (* - operator Kleene go) Σ * = Σ 0 U Σ 1 U Σ 2 U 26.02.2014 JIP- 2 10

Język Językiem nazywamy zbiór łańcuchów (słów) wybranych z pewnego alfabetu Σ (inaczej: jeśli Σ jest alfabetem i L Σ* to L nazywamy językiem nad Σ) Przykłady język polski, angielski, C, C++, Języki abstrakcyjne Język ze słów złożonych z n zer i n jedynek {, 01, 0011, 000111, } Język ze słów złożonych z 0 i 1 zawierających tyle samo zer i jedynek {, 01, 0101, 1010, 0110, } Zbiór liczb pierwszych zapisanych w postaci binarnej {, 10, 11, 101, 111, 1011, } Σ* - zbiór pusty {}; zauważmy, że 26.02.2014 JIP- 2 11

Problem Dla danego w Σ * rozstrzygnąć czy w L(Σ) Przykład. Rozstrzygnięcie czy napis należy do języka liczb pierwszych L p jest w ogólności trudnym problemem obliczeniowym Praca parsera! 26.02.2014 JIP- 2 12

Definicja DAS A = (Q, Σ, δ, q 0, F) A = nazwa DAS Q = skończony zbiór stanów Σ = zbiór symboli wejściowych δ = funkcja przejścia (ze stanu do stanu) q 0 = stan początkowy F = zbiór stanów końcowych 26.02.2014 JIP- 2 13

Definicja DAS Notacja wygodniejsza Diagram przejść Tablica przejśc Przykład: DAS akceptujący łańcuchy zawierające podłańcuch 01 1 q 0 q 2 0 q 10 0 1 0,1 26.02.2014 JIP- 2 14

DAS, funkcja przejścia Funkcja przejścia dla DAS z poprzedniego przykładu; δ(stan, symbol_wejściowy) stan; 0 1 q 0 q 2 q 0 *q 1 q 1 q 1 q 2 q 2 q 1 q 0 q 02 q 0 0 1 0 q 0 1 q 1 0,1 (gwiazdka oznacza stany akceptujące) 26.02.2014 JIP- 2 15

DAS i δ(stan,symbol) 26.02.2014 JIP- 2 16

Prosty automat A, B, C,..., Z start " " stan przejście st. końcowy 26.02.2014 JIP- 2 17

Prosty automat A, B, C,..., Z start " " AUTOMAT 26.02.2014 JIP- 2 18

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 (Przykład pożyczony z kursu cs143, Stanford) 26.02.2014 JIP- 2 19

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 20

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 21

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 22

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 23

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 24

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 25

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 26

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 27

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 28

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 29

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 30

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 31

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 32

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 33

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 34

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 0 1 1 1 0 1 26.02.2014 JIP- 2 35

A. złożony, NAS 0 1 0 start 0, 1 1 0 1 Ponieważ automat znalazł się w jednym ze stanów końcowych, więc słowo zostało zaakceptowane 0 1 1 1 0 1 26.02.2014 JIP- 2 36

Rozszerzenie δ Podstawa. δ(q, ) = q Krok indukcyjny. Jeśli w=xa, to δ(q,w) = δ(δ(q,x),a) Aby obliczyć δ(q,w) obliczamy najpierw δ(q,x) czyli stan, w którym znajdzie się automat po przetworzeniu wszystkich symboli w poza ostatnim. Przypuśćmy, że stanem tym jest p. Wtedy dokonując przejścia ze stanu p na wejściu a, a więc ostatnim symbolu w, otrzymamy δ(q,w), a zatem δ(q,w) =δ(p,a) 26.02.2014 JIP- 2 37

Przykład DAS L={w w ma parzystą liczbę zer i parzystą liczbę jedynek} Zadaniem DAS jest więc liczenie zer i jedynek modulo 2 Start 0 1 q 0 1 q 1 0 0 q 2 1 q 3 0 1 *q 0 q 2 q 1 q 1 q 3 q 0 q 2 q 0 q 3 q 3 q 1 q 2 0 26.02.2014 JIP- 2 38

Język DAS Język DAS A=(Q, Σ, δ, q 0, F) oznaczamy przez L(A) i definiujemy następująco: L(A) = {w δ(q 0,w) F} Język DAS A, L(A), to zbiór słów w przeprowadzających stan początkowy automatu q 0 w jeden ze stanów akceptujących (końcowych) F. Jeśli L=L(A) dla pewnego A to L nazywamy językiem regularnym. 26.02.2014 JIP- 2 39

Wyrażenia regularne (RE) Definicja: RE = wyrażenie regularne (regular expression, regex) RE są to reguły definiujące słowa lub zbiory słów (łańcuchów) należących do języka formalnego Σ *. Reguły składania dla x i y należących do reg: konkatenacja (złożenie): xy alternatywa: x y lub x+y; czytaj x lub y powtarzanie: x*, x powtórzone zero lub więcej razy RE każdy symbol alfabetu Σ, pusty łańcuch jeśli r i p są RE to również (r), rp, r p, r* są RE nic poza tym nie jest RE 26.02.2014 JIP- 2 40

Priorytet operatorów RE Priorytet = kolejność (R) R* R 1 R 2 R 1 R 2 lub R 1 + R 2 Przykład: ab*c d należy interpretować jako ((a(b*))c) d 26.02.2014 JIP- 2 41

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera 00 jako podłańcuch (0 1)*00(0 1)* 26.02.2014 JIP- 2 42

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera 00 jako podłańcuch (0 1)*00(0 1)* 110011 0000 01111011100111 26.02.2014 JIP- 2 43

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera tylko trzy symbole (0 1)(0 1)(0 1) 011 110 111 26.02.2014 JIP- 2 44

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera tylko trzy symbole (0 1){3} 011 110 111 26.02.2014 JIP- 2 45

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera przynajmniej jedno 0 1*00*1* 0111 11011 111011 26.02.2014 JIP- 2 46

Przykłady prostych RE Σ={0,1} alfabet Łańcuch, który zawiera jedno 0 1*0?1* 0111 11011 111011 26.02.2014 JIP- 2 47

Zastosowania RE Σ={a, @,.}, gdzie a=dowolna litera Adresy e- mail aa* (.aa*)* @ aa*.aa* (.aa*)* 26.02.2014 JIP- 2 48

Zastosowania RE Σ={a, @,.}, gdzie a=dowolna litera Adresy e- mail aa* (.aa*)* @ aa*.aa* (.aa*)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl 26.02.2014 JIP- 2 49

Zastosowania RE Σ={a, @,.}, gdzie a=dowolna litera Adresy e- mail aa* (.aa*)* @ aa*.aa* (.aa*)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl 26.02.2014 JIP- 2 50

Zastosowania RE Σ={a, @,.}, gdzie a=dowolna litera Adresy e- mail a+ (.a+)* @ a+.a+(.a+)* piotr@gmail.com piotr.kowalski@umcs.lublin.pl 26.02.2014 JIP- 2 51

Zastosowania RE Σ={a, @,.}, gdzie a=dowolna litera Adresy e- mail a+ (.a+)* @ a+ (.a+)+ piotr@gmail.com piotr.kowalski@umcs.lublin.pl 26.02.2014 JIP- 2 52

Zastosowania RE Σ={+, -, 0,...,9} Liczby nieparzyste ze znakiem (+ - )?(0 1 2 3 4 5 6 7 8 9)*(1 3 5 7 9) - 121 1157 +111115 26.02.2014 JIP- 2 53

Zastosowania RE Σ={+, -, 0,...,9} Liczby nieparzyste ze znakiem (+ - )?[0123456789]*[13579] - 121 1157 +111115 26.02.2014 JIP- 2 54

Zastosowania RE Σ={+, -, 0,...,9} Liczby nieparzyste ze znakiem (+ - )?[0-9]*[13579] - 121 1157 +111115 26.02.2014 JIP- 2 55

Zastosowania RE Przykład. Σ ={a,b} alfabet łańcuchy zawierające tylko nieparzystą liczbę a: a(aa)* łańcuchy zawierające aa: b*(aa)*b* RE [0-9]* realizuje następujący DAS skończony pokazany poniżej 26.02.2014 JIP- 2 56

Zastosowania RE Zadanie: Podać RE, które realizuje automat skończony pokazany poniżej 26.02.2014 JIP- 2 57

Inne automaty skończone NAS = niedeterministyczny automat skończony; może znaleźć się jednocześnie w wielu stanach wyjściowych - NAS = NAS reagujący na słowa puste Przykład. - NAS akceptujący liczby dziesiętne postaci: opcjonalny znak + lub - ciąg cyfr kropka ciąg cyfr Liczba=(ewZnakCyfryKropkaCyfry) NAS ze stosem inne Start 0, 1,..., 9 0, 1,..., 9 q,+,- 0 q 1 q 2 q 3 q 5. 0,1,...,9 0,1,...,9 q 4. 26.02.2014 JIP- 2 58

Równoważność NAS i RE NAS akceptujący język RE (0 1)*(000 111)(01)* 26.02.2014 JIP- 2 59

Równoważność automatów i RE -NFA NFA RE DFA (Hopcro i in.) 26.02.2014 JIP- 2 60

Reguły McNaughtona- Yamady- Thompsona 1. Ten NFA akceptuje jeden wybrany symbol alfabetu 2. Ten NFA akceptuje tylko 3. Ten - NFA akceptuje r s R S 4. Ten - NFA akceptuje rs R S 5. Ten - NFA akceptuje r* R 26.02.2014 JIP- 2 61

Od RE do DAS Używając podanych reguł (McNaughton- Yamada- Thompson; patrz: Aho+) możemy zbudować NAS z danych RE, następnie przekształcić NFA w DAS. Alfabet jest cały czas ten sam. Języki RE i tak zbudowanego DAS są identyczne (Jak to zrobić dokładnie? Patrz np. Aho+ lub HopcroM+) 26.02.2014 JIP- 2 62

Zadanie Pokaż, że NAS pokazany obok (ß ) można zastąpić przez DAS pokazany obok, poniżej. Zapisz RE dla otrzymanego DAS 26.02.2014 JIP- 2 63

Przykład 0 Zamiana wyrażenia regularnego ( 0 1) *1( 0 1) na DAS z wykorzystaniem reguł Thompsona. 1 (a) 0 1 (b) Star t 0 1 1 0 (c) 1 26.02.2014 JIP- 2 64

Wyrażenia regularne UNIXa UNIX. dowolny znak * - dowolna liczba wystąpień ^ - początek wiersza $ - koniec wiersza \ - znosi znaczenie specjalne; zwykły znak [abc] któryś ze znaków wypisanych \(...\) zapamiętywanie ciągu w buforze \<, \> początek, koniec słowa Standard POSIX klasy znaków w nawiasach [: :] [:alnum:], [:alpha:], [:blank:], [:cntrl:], [:digit:], [:graph:] drukowalne [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:] 26.02.2014 JIP- 2 65

lex, flex generator skanerów Proces przejścia od RE do automatów (pokazany krótko powyżej) jest wykorzystywany przez narzędzie lex lub flex, służące do budowania skanerów programów do analizy leksykalnej innych programów, napisanych w jakimś języku, np. C++ lub Java. flex pobiera ciąg wyrażeń regularnych, opisujących dany język, buduje automat skończony oraz program w języku C służący jako analizator leksykalny programów... 26.02.2014 JIP- 2 66

Przykład języka programowania Fortran (pierwszy, prymitywny język wyższego poziomu) zmienne: dł. 5 znaków, pierwszy znak litera; duże litery. Zmienne o nazwach zaczynających się na i, j, k, l, m, n mają domyślnie typ całkowity, inne rzeczywisty; Nie potrzeba deklarować zmiennych z wyjątkiem tablic. Tablice mogą być co najwyżej 3 wymiarowe. Instrukcja podstawienia z lewej strony zawiera zmienną, z prawej wyrażenie Struktury kontrolne bezwzględny skok: GOTO <numer instrukcji> skok obliczany: GOTO (20,30,40,50) I - - I może mieć wartość 1, 2, 3,4 skok do instrukcji o numerze 20, 30, 40 lub 50 IF (A+B-C/2) 10, 12, 14 - - skok do 10, 12, 14 w zależności od wartości w=a+b+c/2: w<0 - > 10, w=0 - > 12, w>0 - > 14 Instrukcja DO: DO 21 K=1, N, 2 wykonuje się do instrukcji z numerem 21 łącznie; K zmienia się co 2 od 1 do N. Brak podprogramów definiowanych przez użytkownika Ignorowane są odstępy; np. DIMENSIONDANE(1234) lub D I M E N S I O N D A N E (1234) lub ładniej DIMENSION DANE(1234) - - deklaracja tablicy o długości 1234 Słów kluczowych można używać jako nazw np. IF = 10 lub DIMENSION DO(2)! Zadanie. NAPISZ schemat skaneraj Pierwsze skanery to skanery ad hoc. Tutaj nawet RE, czy automaty skończone mają problem. 26.02.2014 JIP- 2 67

Literatura A. Aho, R. Sethi, J. Ullman, Compilers: Principles, Techniques, and Tools. Reading, MA: Addison- Wesley, 1986; jest wydanie polskie. J. Hopcro, J. Ullman, IntroducFon to Automata Theory, Languages, and ComputaFon, Reading MA: Addison- Wesley, 1979; jest wydanie polskie. 26.02.2014 JIP- 2 68

Co dalej? Character stream [Lexical Analyzer] token stream [Syntax Analyzer] syntax tree [SemanFc Analyzer] syntax tree [Intermediate Code Generator] intermediate representafon [Machine- Independent Code OpFmizer] intermediate representafon [Code Generator] target- machine code [Machine- Dependent Code OpFmizer] target- machine code 26.02.2014 JIP- 2 69