Metody kompilacji Wykłady 4-5
|
|
- Mikołaj Sobczak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Metody kompilacji Wykłady 4-5
2 Analiza Leksykalna Wstęp Analizator leksykalny odczytuje znaki z wejścia, rozpoznaje leksemy i produkuje tokeny. Wraz z symbolem terminalnym, który jest używany przez parser, token zawiera dodatkowe informacje w postaci wartości atrybutów. Token jest to terminal wraz z dodatkową informacją. Włodzimierz Bielecki WI ZUT 2
3 ANALIZA LEKSYKALNA Program źródłowy Analizator leksykalny Parser Tablice symboli Włodzimierz Bielecki WI ZUT 3
4 Wstęp Analiza Leksykalna Sekwencja znaków wejściowych, która zawiera pojedynczy token nazywa się leksemem. Tak więc, można powiedzieć, że analizator leksykalny izoluje parser od reprezentacji znakowej symbolu, czyli parser dostaje tokeny, nie znaki. Włodzimierz Bielecki WI ZUT 4
5 ANALIZA LEKSYKALNA Głównym zadaniem analizatora leksykalnego jest wczytywanie znaków z programu źródłowego, rozpoznawanie leksemów i produkowanie tokenów(znaczników) dla każdego leksemu. Włodzimierz Bielecki WI ZUT 5
6 ANALIZA LEKSYKALNA Inne zadania: Wyeliminowanie komentarzy i znaków białych : spacja, znak nowej linii, znak tabulacji. Kolejnym zadaniem jest współudział w obsłudze błędów generowanych przez kompilator. Włodzimierz Bielecki WI ZUT 6
7 ANALIZA LEKSYKALNA Na przykład, analizator leksykalny może śledzić liczbę linijek kodu, liczbę znaków każdej linijki i przekazywać te dane do kompilatora. Włodzimierz Bielecki WI ZUT 7
8 ANALIZA LEKSYKALNA Dlaczego analizator leksykalny jest tworzony osobno 1. Prostota projektowania analizatora leksykalnego(w stosunku do projektowania analizatora syntaktycznego) jest najważniejszym czynnikiem. Włodzimierz Bielecki WI ZUT 8
9 ANALIZA LEKSYKALNA Dlaczego analizator leksykalny jest tworzony osobno 2. Zwiększona wydajność kompilatora. Opracowane są wyspecjalizowane bardzo wydajne techniki analizy leksykalnej. Ponadto techniki buforowania do wczytywania znaków wejściowych mogą przyspieszyć kompilator znacząco. Włodzimierz Bielecki WI ZUT 9
10 ANALIZA LEKSYKALNA Dlaczego analizator leksykalny jest tworzony osobno 3. Kompilator ma zwiększoną przenośność czyli może być stosowany na różnych platformach. Specyficzne dla urządzeń wejścia osobliwości mogą być uwzględnione tylko w analizatorze leksykalnym, pozostałe części kompilatora zostają bez zmian. Włodzimierz Bielecki WI ZUT 10
11 ANALIZA LEKSYKALNA Tokeny(Tokens), Wzorce(Patterns), Leksemy(Lexemes) Token jest parą składającą się z nazwy symbolicznej i opcjonalnej wartości atrybutu. Włodzimierz Bielecki WI ZUT 11
12 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy Wzorzec jest opisem postaci, którą leksem może przyjąć. W przypadku słów kluczowych, wzorzec jest po prostu ciągiem znaków, które tworzą słowa kluczowe. Włodzimierz Bielecki WI ZUT 12
13 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy Leksem jest ciągiem znaków w programie źródłowym, który pasuje do jakiegoś wzorca. Jest to niepodzielny element programu, dlatego jest nazywany również atomem. Włodzimierz Bielecki WI ZUT 13
14 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy Token Leksem Wzorzec if if if id abc, n, count, litera +cyfra NUMBER 3.14, 1000 stała numeryczna ; ; ; Włodzimierz Bielecki WI ZUT 14
15 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy Dla kodu: printf ("Total = %d\n, score) ; zarówno printf i score są leksemami pasującymi do wzorca dla tokena id, "Total = %d\n jest to leksem pasujący do literału( dosłowny tekst). Włodzimierz Bielecki WI ZUT 15
16 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy W wielu językach programowania, następujące przypadki obejmują większość tokenów: 1. Jeden token dla każdego słowa kluczowego. Wzorzec dla słowa kluczowego jest taki sam jak słowo kluczowe. Włodzimierz Bielecki WI ZUT 16
17 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy 2. Tokeny dla operatorów: indywidualnie dla każdego operatora lub jeden token dla grupy operatorów(przykładowo operatorów relacji). Włodzimierz Bielecki WI ZUT 17
18 ANALIZA LEKSYKALNA Tokeny, Wzorce, Leksemy 3. Jeden token reprezentujący wszystkie identyfikatory. 4. Jeden lub więcej tokenów reprezentujących stałe, takie jak liczby i literały. 5. Tokeny dla każdego z symboli interpunkcyjnych, takich jak lewy i prawy nawiasy, przecinek, średnik. Włodzimierz Bielecki WI ZUT 18
19 ANALIZA LEKSYKALNA Atrybuty tokenów Token posiada opcjonalne atrybuty. Najważniejszym przykładem jest token id, z którym musimy skojarzyć dużo informacji: typ danych, wymiar tablicy, liczba elementów tablicy, miejsce w programie, w którym zmienna się pojawia po raz pierwszy.. Włodzimierz Bielecki WI ZUT 19
20 ANALIZA LEKSYKALNA Atrybuty tokenów Atrybuty są przechowywane w tablicy symboli. Tak więc jednym z atrybutów jest również wskaźnik do wejścia tablicy symboli dla identyfikatora. Włodzimierz Bielecki WI ZUT 20
21 ANALIZA LEKSYKALNA Atrybuty tokenów Przykład: dla instrukcji przypisania w Fortranie E = M * C ** 2 mamy następujący wynik produkowany przez analizator leksykalny: Włodzimierz Bielecki WI ZUT 21
22 ANALIZA LEKSYKALNA Atrybuty tokenów <id, pointer to symbol-table entry for E > < assign_op > <id, pointer to symbol-table entry for M > <mult_op> <id, pointer to symbol-table entry for C > <exp-op> <number, integer value 2 > Włodzimierz Bielecki WI ZUT 22
23 ANALIZA LEKSYKALNA Błędy leksykalne (Lexical errors) Wykrywanie błędów fi(a==f(x)) Raportowanie błędów Usuwanie błędów Włodzimierz Bielecki WI ZUT 23
24 ANALIZA LEKSYKALNA Usuwanie błędów Załóżmy, że analizator leksykalny podczas rozpoznawania leksemu nie może kontynuować swojego działania, ponieważ żaden ze wzorców nie pasuje. Analizator może usunąć kolejne znaki z pozostałego wejścia, aż potrafi dopasować wczytywane znaki do jakiegoś wzorca. Włodzimierz Bielecki WI ZUT 24
25 Analiza Leksykalna Analizator leksykalny, który będziemy tworzyć, pozwala na rozpoznawanie liczb, identyfikatorów i znaków białych" (spacje, tabulatory i znaki nowej linii) w wyrażeniach. Włodzimierz Bielecki WI ZUT 25
26 Analiza Leksykalna Schemat translacji expr ->expr + term { print ('+') expr - term { print('-') term term -> term * factor { print('*') term / factor { print ( / ) factor factor -> ( expr ) num { print (num. value) id { print (id. lexeme) Włodzimierz Bielecki WI ZUT 26
27 Analiza Leksykalna Usuwanie znaków białych Większość języków umożliwia dowolną ilość przestrzeni białej między leksemami. Komentarze mogą być traktowane jako przestrzeń biała. Włodzimierz Bielecki WI ZUT 27
28 Analiza Leksykalna Usuwanie znaków białych Jeśli przestrzeń biała jest eliminowana przez analizator leksykalny, to parser nie będzie musiał brać pod uwagę znaków białych. Alternatywą jest uwzględnienie znaków białych w gramatyce ale to znacznie zwiększa złożoność parsera. Włodzimierz Bielecki WI ZUT 28
29 Analiza Leksykalna Pseudokod rozpoznawania i usuwania znaków białych: for ( ; ; peek = next input character ) { if ( peek is a blank or a tab ) do nothing; else if ( peek is a newline ) line = line+1; else break; Włodzimierz Bielecki WI ZUT 29
30 Analiza Leksykalna Czytanie z wyprzedzeniem Analizator leksykalny może wymagać odczytywania znaków wejściowych z wyprzedzeniem, zanim zdecyduje jaki ma być leksem właściwy. Na przykład, analizator leksykalny dla C lub Javy po rozpoznaniu znaku > musi odczytać następny znak. Włodzimierz Bielecki WI ZUT 30
31 Analiza Leksykalna Czytanie z wyprzedzeniem Jeśli następnym znakiem jest =, to znak > jest częścią sekwencji znaków >=, reprezentujących leksem (operator) "większe lub równe". Inaczej znak > sam tworzy leksem "większy niż ; w takim przypadku analizator leksykalny odczytał jeden znak za dużo. Włodzimierz Bielecki WI ZUT 31
32 Analiza Leksykalna Czytanie z wyprzedzeniem Ogólne podejście do czytania znaków wejścia z wyprzedzeniem jest oparte na zastosowaniu bufora wejściowego, z którego analizator leksykalny może odczytać znak i zapisać go z powrotem. Włodzimierz Bielecki WI ZUT 32
33 Analiza Leksykalna Czytanie z wyprzedzeniem Bufory wejściowe mogą być uzasadnione również względem efektywności analizatora ponieważ pobieranie ciągu znaków jest zwykle bardziej wydajne niż odczyt jednego znaku na raz. Włodzimierz Bielecki WI ZUT 33
34 Analiza Leksykalna Czytanie z wyprzedzeniem Wskaźnik śledzi część wejścia, która już została przeanalizowana; przejście do poprzedniego znaku jest realizowane przez przesunięcie wskaźnika do tyłu. Włodzimierz Bielecki WI ZUT 34
35 Analiza Leksykalna Czytanie z wyprzedzeniem Jeden znak odczytany z wyprzedzeniem zazwyczaj wystarcza, więc prostym rozwiązaniem jest użycie zmiennej, powiedzmy o nazwie peek, do przechowywania następnego znaku wejściowego. Włodzimierz Bielecki WI ZUT 35
36 Analiza Leksykalna Czytanie z wyprzedzeniem Analizator leksykalny czyta naprzód tylko wtedy, gdy musi. Operatora * można użyć aby nie odczytywać następnego znaku. W takich przypadkach wartością zmiennej peek jest znak spacji, który może być pominięty gdy analizator jest wywoływany aby znaleźć następny leksem. Włodzimierz Bielecki WI ZUT 36
37 Analiza Leksykalna Rozpoznawanie stałych Za każdym razem, gdy w wyrażeniu pojawia się pojedyncza cyfra, rozsądnym wydaje się wczytywanie kolejnych cyfr celem rozpoznania liczby całkowitej ponieważ jest ona sekwencją cyfr. Włodzimierz Bielecki WI ZUT 37
38 Analiza Leksykalna Rozpoznawanie stałych Stałe całkowite mogą być reprezentowane przez utworzenie symbolu terminalnego, powiedzmy o nazwie num dla każdej stałej, lub wprowadzając składnię stałych całkowitych do gramatyki. Włodzimierz Bielecki WI ZUT 38
39 Analiza Leksykalna Rozpoznawanie stałych Praca łączenia cyfr w liczbę z reguły należy do zadań analizatora leksykalnego, więc liczby mogą być traktowane jako pojedyncze jednostki(leksemy) w trakcie parsowania i tłumaczenia kodu źródłowego. Włodzimierz Bielecki WI ZUT 39
40 Analiza Leksykalna Rozpoznawanie stałych Kiedy pojawia się ciąg cyfr w strumieniu wejściowym, analizator leksykalny przekazuje do parsera token, który składa się z terminala num wraz z atrybutem rozpoznanej liczby całkowitej. Włodzimierz Bielecki WI ZUT 40
41 Analiza Leksykalna Rozpoznawanie stałych Dla napisu wejściowego analizator leksykalny produkuje następujący wynik: <num,31> <+> <num,28> <+> <num,59> Włodzimierz Bielecki WI ZUT 41
42 Analiza Leksykalna Pseudokod do rozpoznawania stałych if ( peek holds a digit ) { v = 0; do { v = v * 10 + integer value of digit peek; peek = next input character; while ( peek holds a digit ) ; return token (num, v); Włodzimierz Bielecki WI ZUT 42
43 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Większość języków używa słów kluczowych, na przykład: for, do, if, while,. które są reprezentowane przez ciągi znaków. Włodzimierz Bielecki WI ZUT 43
44 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Ciągi znaków są również wykorzystywane do tworzenia nazw zmiennych, tablic, funkcji i t. d. Żeby uprościć parser, gramatyki traktują identyfikatory jako terminal, powiedzmy id, za każdym razem, gdy identyfikator pojawi się na wejściu. Włodzimierz Bielecki WI ZUT 44
45 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Na przykład dla wejścia: count = count + increment; parser dostanie od analizatora leksykalnego następujący ciąg tokenów: id = id + id. Dla tokena id atrybutem jest leksem reprezentujący identyfikator. Włodzimierz Bielecki WI ZUT 45
46 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Dla wejścia count = count + increment; Analizator leksykalny produkuje: id, "count " = id, "count " + id, "increment " ; Włodzimierz Bielecki WI ZUT 46
47 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Słowa kluczowe generalnie spełniają zasady tworzenia identyfikatorów, więc jest potrzebny mechanizm do podjęcia decyzji: leksem reprezentuje słowo kluczowe czy identyfikator. Włodzimierz Bielecki WI ZUT 47
48 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Problem jest łatwiejszy do rozwiązania, jeśli słowa kluczowe są zastrzeżone: nie mogą one być wykorzystywane jako identyfikatory. Ciąg znaków tworzy identyfikator jeżeli nie reprezentuje on słowo kluczowe. Włodzimierz Bielecki WI ZUT 48
49 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Analizator leksykalny rozwiązuje ten problem za pomocą tablicy do przechowywania ciągów znaków, czyli symboli. Włodzimierz Bielecki WI ZUT 49
50 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych 1. Tablica symboli może izolować resztę kompilatora z reprezentacji ciągów, fazy kompilatora mogą korzystać z referencji lub wskaźnika do łańcucha w tabeli. Referencje/wskaźniki mogą być bardziej efektywne niż manipulowanie samymi ciągami. Włodzimierz Bielecki WI ZUT 50
51 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych 2. Tablica symboli może być inicjalizowana słowami zarezerwowanymi. Włodzimierz Bielecki WI ZUT 51
52 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Kiedy analizator leksykalny rozpoznaje leksem, który może stanowić identyfikator, najpierw sprawdza, czy leksem jest przechowywany w tablicy symboli. Jeżeli tak, to zwraca token przechowywany w tablicy; w przeciwnym razie tworzy i zwraca token, którego pierwszym elementem jest id. Włodzimierz Bielecki WI ZUT 52
53 Analiza Leksykalna Rozpoznawanie identyfikatorów i słów kluczowych Tablica symboli może być zaimplementowana jako tablica haszująca z użyciem klasy o nazwie Hashtable. Na przykład: Hashtable words = new Hashtable(); Włodzimierz Bielecki WI ZUT 53
54 Pseudokod do rozpoznawania identyfikatorów i słów kluczowych if ( peek holds a letter ) { collect letters or digits into a buffer b; s = string formed from the characters in b; w = token returned by words.get(s); if ( w is not null ) return w; else { Enter the key-value pair (s, id, s ) into words return token id, s ; Włodzimierz Bielecki WI ZUT 54
55 Analiza Leksykalna Pseudokod funkcji scan, która zwraca tokeny Token scan() { skip white space; handle numbers; handle reserved words and identifiers; /* if we get here, treat read-ahead character peek as a token */ Token t = new Token(peek); peek = blank return t; Włodzimierz Bielecki WI ZUT 55
56 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Włodzimierz Bielecki WI ZUT 56
57 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Numer aktualnie analizowanego wiersza Włodzimierz Bielecki WI ZUT 57
58 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Atrybut symbolu leksykalnego Włodzimierz Bielecki WI ZUT 58
59 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Pobierz jeden znak Włodzimierz Bielecki WI ZUT 59
60 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Jeżeli t jest białym znakiem, pomiń znak Włodzimierz Bielecki WI ZUT 60
61 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Jeżeli t jest znakiem nowej linii, zwiększ numer aktualnie analizowanego wiersza Włodzimierz Bielecki WI ZUT 61
62 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Jeżeli t jest liczbą, zamień napis na wartość typu całkowitego Włodzimierz Bielecki WI ZUT 62
63 Analizator leksykalny w C int lineno = 1; int tokenval = NONE; int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { tokenval = t '0'; t = getchar(); while (isdigit(t)) { tokenval = tokenval*10 + t '0'; t = getchar(); ungetc (t, stdin); return NUM; else { tokenval = NONE; return t; Wczytany znak jest nieznanym symbolem Włodzimierz Bielecki WI ZUT 63
64 Tablica symboli Tablica symboli jest wykorzystywana do przechowywania zmiennych oraz słów kluczowych. Jest inicjalizowana poprzez wstawienie do niej słów kluczowych: Włodzimierz Bielecki WI ZUT 64
65 Tablica symboli int insert(const char* s, int t); /* zwraca indeks w tablicy symboli dla nowego leksemu s i tokenu t */ int lookup(const char* s); /* zwraca indeks wpisu dla leksemu s lub 0 gdy nie znaleziono */ insert("div", DIV); insert("mod", MOD); Włodzimierz Bielecki WI ZUT 65
66 Analizator leksykalny z tablicą symboli int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { ungetc (t, stdin); scanf ("%d", &tokenval); return NUM; else if (isalpha (t)) { int p, b = 0; while (isalnum (t)) { lexbuf[b] = t; t = getchar (); b++; if (b >= BSIZE) error ("compiler error"); lexbuf[b] = EOS; if (t!= EOF) ungetc (t, stdin); p = lookup (lexbuf); if (p == 0) p = insert (lexbuf, ID); tokenval = p; return symtable[p].token; else if (t == EOF) return DONE; else { tokenval = NONE; return t; Włodzimierz Bielecki WI ZUT 66
67 Analizator leksykalny z tablicą symboli int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { ungetc (t, stdin); scanf ("%d", &tokenval); return NUM; else if (isalpha (t)) { int p, b = 0; while (isalnum (t)) { lexbuf[b] = t; t = getchar (); b++; if (b >= BSIZE) error ("compiler error"); lexbuf[b] = EOS; if (t!= EOF) ungetc (t, stdin); p = lookup (lexbuf); if (p == 0) p = insert (lexbuf, ID); tokenval = p; return symtable[p].token; else if (t == EOF) return DONE; else { tokenval = NONE; return t; Jeżeli t jest identyfikatorem Włodzimierz Bielecki WI ZUT 67
68 Analizator leksykalny z tablicą symboli int lexan () { int t; while (1) { t = getchar (); if (t == ' ' t == '\t'); else if (t == '\n') lineno++; else if (isdigit (t)) { ungetc (t, stdin); scanf ("%d", &tokenval); return NUM; else if (isalpha (t)) { int p, b = 0; while (isalnum (t)) { lexbuf[b] = t; t = getchar (); b++; if (b >= BSIZE) error ("compiler error"); lexbuf[b] = EOS; if (t!= EOF) ungetc (t, stdin); p = lookup (lexbuf); if (p == 0) p = insert (lexbuf, ID); tokenval = p; return symtable[p].token; else if (t == EOF) return DONE; else { tokenval = NONE; return t; Jeżeli t jest znakiem końca pliku Włodzimierz Bielecki WI ZUT 68
69 ANALIZA LEKSYKALNA Ciągi znaków i języki (Strings and Languages) Alfabet jest to dowolny skończony zbiór symboli. Typowe przykłady symboli to są litery, cyfry i znaki interpunkcyjne. Zbiór {0,1 jest alfabetem binarnym. Znaki tablicy kodów ASCII tworzą ważny przykład alfabetu. Włodzimierz Bielecki WI ZUT 69
70 ANALIZA LEKSYKALNA Ciągi znaków i języki Napis (ciąg znaków, łańcuch) nad pewnym alfabetem jest to skończony ciąg symboli z tego alfabetu. Długość napisu s, zapisywana jako s, jest to liczba wystąpień symboli w napisie s. Włodzimierz Bielecki WI ZUT 70
71 ANALIZA LEKSYKALNA Ciągi znaków i języki Na przykład, napis banan ma długość 5. Pusty ciąg znaków, oznaczany jako, jest ciągiem o zerowej długości. Bardzo szeroka definicja języka: Język jest to zbiór napisów nad pewnym ustalonym alfabetem. Włodzimierz Bielecki WI ZUT 71
72 ANALIZA LEKSYKALNA Ciągi znaków i języki Przykład: dla alfabetu L = {A,..., Z, zbiór {A, B, C, BF,,ABZ, jest językiem zdefiniowanym przez alfabet L. Należy zauważyć, że definicja "języka" nie wymaga, aby każdy napis posiadał jakiś sens. Włodzimierz Bielecki WI ZUT 72
73 ANALIZA LEKSYKALNA Pojęcia związane z napisami Prefiks(przedrostek) napisu s jest to dowolny napis uzyskany przez usunięcie zero lub więcej symboli z końca s. Na przykład, ban, banana, and są prefiksami napisu banana. Włodzimierz Bielecki WI ZUT 73
74 ANALIZA LEKSYKALNA Pojęcia związane z napisami Sufiks(przyrostek) napisu s jest to dowolny napis uzyskany przez usunięcie zero lub więcej symboli z początku s. Na przykłąd, nana, banana, and są sufiksami napisu banana. Włodzimierz Bielecki WI ZUT 74
75 ANALIZA LEKSYKALNA Pojęcia związane z napisami Podnapis(podciąg spójny) napisu s jest uzyskiwany przez usuwanie jakichkolwiek przedrostków i przyrostków z s. Na przykład, banana, nan i są podnapisami napisu banana. Włodzimierz Bielecki WI ZUT 75
76 ANALIZA LEKSYKALNA Pojęcia związane z napisami Przedrostki, przyrostki i podnapisy napisu s są właściwe jeśli nie są napisami pustymi lub nie są równe s. Włodzimierz Bielecki WI ZUT 76
77 ANALIZA LEKSYKALNA Pojęcia związane z napisami Podciąg napisu s jest to dowolny ciąg utworzony przez usunięcie zero lub więcej nie koniecznie kolejnych znaków z s. Na przykład, baan jest podciągiem napisu banana. Włodzimierz Bielecki WI ZUT 77
78 ANALIZA LEKSYKALNA Pojęcia związane z napisami Złączenie (concatenation) napisów x i y jest to napis xy utworzony przez dodanie y na koniec do x. Na przykład jeśli x = dog i y = house, to xy = doghouse. Dla napisu pustego są sprawiedliwe równości: s = s = s. Włodzimierz Bielecki WI ZUT 78
79 ANALIZA LEKSYKALNA Pojęcia związane z napisami Podnoszenie napisu do potęgi definiujemy w następujący sposób: s 0 = s i = s i-1 s dla i > 0 Przykłady: s 1 = s, s 2 = ss, s 3 = sss. Włodzimierz Bielecki WI ZUT 79
80 ANALIZA LEKSYKALNA Operacje na językach Suma(Union) L M = {s s L or s M Złączenie (Concatenation) LM = {xy x L and y M Potęgowanie (Exponentiation) L 0 = { ; L i = L i-1 L Włodzimierz Bielecki WI ZUT 80
81 ANALIZA LEKSYKALNA Operacje na językach Domknięcie Kleen a (Kleene closure) L * = i=0,, L i Domknięcie dodatnie (Positive closure) L + = i=1,, L i Włodzimierz Bielecki WI ZUT 81
82 ANALIZA LEKSYKALNA Wyrażenia regularne (Regular Expressions) Podstawowe wyrażenia regularne: jest wyrażeniem regularnym oznaczającym język { a jest wyrażeniem regularnym oznaczającym język {a Włodzimierz Bielecki WI ZUT 82
83 ANALIZA LEKSYKALNA Wyrażenia regularne Jeśli r i s są wyrażeniami regularnymi oznaczającymi języki L(r) i M(s) to r s jest wyrażeniem regularnym oznaczającym język L(r) M(s) rs jest wyrażeniem regularnym oznaczającym język L(r)M(s) Włodzimierz Bielecki WI ZUT 83
84 ANALIZA LEKSYKALNA Wyrażenia regularne r * jest wyrażeniem regularnym oznaczającym język L(r) *. (r) jest wyrażeniem regularnym oznaczającym język L(r). Włodzimierz Bielecki WI ZUT 84
85 ANALIZA LEKSYKALNA Wyrażenia regularne Czyli wyrażenia regularne są budowane z mniejszych wyrażeń regularnych w sposób rekurencyjny. Włodzimierz Bielecki WI ZUT 85
86 ANALIZA LEKSYKALNA Wyrażenia regularne Wyrażenia regularne mogą zawierać zbędne pary nawiasów. Możemy usunąć niektóre pary nawiasów, jeśli przyjmiemy następującą konwencję: Włodzimierz Bielecki WI ZUT 86
87 ANALIZA LEKSYKALNA Wyrażenia regularne a) Operator jednoargumentowy * (operator domknięcia) ma najwyższy priorytet i jest łączny lewostronnie, b) Złączenie ma drugi najwyższy priorytet i jest łączne lewostronnie. Włodzimierz Bielecki WI ZUT 87
88 ANALIZA LEKSYKALNA Wyrażenia regularne Przykład : = {a, b. 1. Wyrażenie regularne a b oznacza język {a, b. 2. (a b) (a b) oznacza {aa, ab, ba, bb), czyli język, którego elementami są napisy o długości 2. Włodzimierz Bielecki WI ZUT 88
89 ANALIZA LEKSYKALNA Wyrażenia regularne 3. a* oznacza język, którego elementy są złożeniem zero lub więcej symboli a: {, a, aa, aaa,.... Włodzimierz Bielecki WI ZUT 89
90 ANALIZA LEKSYKALNA Wyrażenia regularne 4. (a b)* oznacza język, którego elementy są złożeniem zero lub więcej symboli a lub b : {, a, b, aa, ab, ba, bb, aaa, a a*b oznacza język {a, b, ab, aab,aaab,... Włodzimierz Bielecki WI ZUT 90
91 ANALIZA LEKSYKALNA Wyrażenia regularne 4. (a b)* oznacza język, którego elementy są złożeniem zero lub więcej symboli a lub b : {, a, b, aa, ab, ba, bb, aaa, a a*b oznacza język {a, b, ab, aab,aaab,... Włodzimierz Bielecki WI ZUT 91
92 Przykład Rozważmy alfabet = { a Jakie jest wyrażenie regularne, które oznacza język, którego każde słowo jest o długości nieparzystej??? Włodzimierz Bielecki WI ZUT 92
93 Przykład Rozważmy alfabet = { a a (aa)* jest wyrażeniem regularnym, które oznacza język, którego każde słowo jest o długości nieparzystej Włodzimierz Bielecki WI ZUT 93
94 Przykład Rozważmy alfabet = { a, b Jakie jest wyrażenie regularne, które oznacza język, którego każde słowo zaczyna się od litery b??? Włodzimierz Bielecki WI ZUT 94
95 Przykład Rozważmy alfabet = { a, b b (a b)* jest wyrażeniem regularnym, które oznacza język, którego każde słowo zaczyna się od litery b Włodzimierz Bielecki WI ZUT 95
96 Przykład Rozważmy alfabet = { a, b Jakie jest wyrażenie regularne, które oznacza język, którego każde słowo musi zaczynać się na literę a, a kończy się na literę b???? Włodzimierz Bielecki WI ZUT 96
97 Przykład Rozważmy alfabet = { a, b b (a b)* a jest wyrażeniem regularnym, które oznacza język, którego każde słowo musi zaczynać się na literę b, a kończy się na literę a Włodzimierz Bielecki WI ZUT 97
98 Przykład Rozważmy alfabet = { a, b, c Jakie jest wyrażenie regularne, które oznacza język: L = { a, c, ab, cb, abb, cbb, abbb, cbbb, abbbb, cbbbb...? Włodzimierz Bielecki WI ZUT 98
99 Przykład Rozważmy alfabet = { a, b, c ((a c) b*) oznacza język: L = { a, c, ab, cb, abb, cbb, abbb, cbbb, abbbb, cbbbb... Włodzimierz Bielecki WI ZUT 99
100 Dziękuję za uwagę Włodzimierz Bielecki WI ZUT 100
Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT
Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd Analiza Syntaktyczna Wstęp Parser dostaje na wejściu ciąg tokenów od analizatora leksykalnego i sprawdza: czy ciąg ten może być generowany przez gramatykę.
Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki
Analiza leksykalna 1 Teoria kompilacji 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)
Metody Kompilacji Wykład 1 Wstęp
Metody Kompilacji Wykład 1 Wstęp Literatura: Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Compilers: Princiles, Techniques, and Tools. Addison-Wesley 1986, ISBN 0-201-10088-6 Literatura: Alfred V. Aho,
Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki
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
Metody Kompilacji Wykład 7 Analiza Syntaktyczna
Metody Kompilacji Wykład 7 Analiza Syntaktyczna Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57 Parsowanie Dla każdej
Metody Kompilacji Wykład 13
Metody Kompilacji Wykład 13 Prosty Translator Translator dla prostych wyrażeń Schemat translacji sterowanej składnią często służy za specyfikację translatora. Schemat na następnym slajdzie zostanie użyty
Zadanie analizy leksykalnej
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:
Metody Kompilacji Wykład 3
Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Języki programowania zasady ich tworzenia
Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie
L E X. Generator analizatorów leksykalnych
L E X Generator analizatorów leksykalnych GENERATOR L E X Zadaniem generatora LEX jest wygenerowanie kodu źródłowego analizatora leksykalnego (domyślnie) w języku C; Kod źródłowy generowany jest przez
Języki formalne i automaty Ćwiczenia 6
Języki formalne i automaty Ćwiczenia 6 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Wyrażenia regularne... 2 Standardy IEEE POSIX Basic Regular Expressions (BRE) oraz Extended
Matematyczne Podstawy Informatyki
Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Stany równoważne Stany p i q są równoważne,
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Program We Kompilator Wy Źródłowy
1. Aho A.V., Ullman J.D. - The Theory of Parsing, Translation and Compiling.1972. 2. Foster J.M. - Automatyczna analiza składniowa. 1976 3. Gries D. - Konstrukcja translatorów dla maszyn cyfrowych, 1984
Stałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Podstawy Kompilatorów
Podstawy Kompilatorów Laboratorium 10 Translacja sterowana składnią w generatorze YACC. Zadanie 1: Proszę napisać program, który dla danej liczby całkowitej j oraz niepustego ciągu liczb naturalnych c
INFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Generatory analizatorów
Generatory analizatorów Generator analizatora leksykalnego flex ( http://www.gnu.org/software/flex/ ) Generator analizatora składniowego bison ( http://www.gnu.org/software/bison/ ) Idea ogólna Opis atomów
Semantyka i Weryfikacja Programów - Laboratorium 6
Semantyka i Weryfikacja Programów - Laboratorium 6 Analizator leksykalny i składniowy - kalkulator programowalny Cel. Przedstawienie zasad budowy i działania narzędzi do tworzenia kompilatorów języków
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Wstęp do programowania
Wstęp do programowania wykład 2 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula Język programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki
Parsery LL() Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Zadanie analizy generacyjnej (zstępującej, top-down) symbol początkowy już terminale wyprowadzenie lewostronne pierwszy od lewej
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};
INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE
Podstawy Kompilatorów
Podstawy Kompilatorów Laboratorium 3 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX oraz kompilator. Dla środowiska Linux mogą to być: Darmowa wersja generatora
Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości
Tablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Laboratorium z użyciem analizatora leksykalnego FLEX
Laboratorium z użyciem analizatora leksykalnego FLEX Analizator leksykalny FLEX jest narzędziem służącym do tworzenia programów rozpoznających wzorce. FLEX na podstawie pliku wejściowego, za pomocą reguł
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1
Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1 ASCII The American Standard Code for Information Interchange, 1968 r. 7 bitów, liczby z zakresu 0-127
Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA
Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający
Analiza leksykalna i generator LEX
Analiza leksykalna i generator LEX Wojciech Complak Wojciech.Complak@cs.put.poznan.pl wprowadzenie generator LEX wyrażenia regularne i niejednoznaczności retrakcja definicje regularne atrybuty lewy kontekst
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 1 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan wykładów (1) Algorytmy i programy Proste typy danych Rozgałęzienia
Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 6: Ciągi znaków mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 17 listopada 2016 1. Wprowadzenie Instrukcja poświęcona jest zmiennym, które służą do przechowywania
Algorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
Temat 1: Podstawowe pojęcia: program, kompilacja, kod
Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,
Zmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Podstawy programowania w języku C i C++
Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Programowanie w językach wysokiego poziomu
Programowanie w językach wysokiego poziomu zajęcia nr 2 Elektronika i Telekomunikacja, semestr III rok akademicki 2014/2015 Plan dzisiejszych zajęć Pliki tekstowe 1. Operacje na plikach - wprowadzenie
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 Ustalmy pewien skończony zbiór symboli Σ zwany alfabetem. Zbiór Σ zawiera wszystkie skończone ciagi symboli z Σ. Podzbiór L Σ nazywamy językiem a x L nazywamy słowem. Specjalne słowo puste oznaczamy
Paradygmaty i języki programowania. Analiza leksykalna Skaner, RE, DAS, NAS, ε- NAS
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]
Języki formalne i automaty Ćwiczenia 4
Języki formalne i automaty Ćwiczenia 4 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Sposób tworzenia deterministycznego automatu skończonego... 4 Intuicyjne rozumienie konstrukcji
ECDL Podstawy programowania Sylabus - wersja 1.0
ECDL Podstawy programowania Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu Podstawy programowania. Sylabus opisuje, poprzez efekty uczenia się, zakres wiedzy
#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 ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH
Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania weryfikacyjne:
Podstawy programowania w C++
Podstawy programowania w C++ Liczby w jaki sposób komputery je widzą? Opracował: Andrzej Nowak Bibliografia: CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Czy wiesz, jak komputery wykonują
KONSTRUKCJA KOMPILATORÓW
KONSTRUKCJA KOMPILATORÓW WYKŁAD Robert Plebaniak PLATFORMA PROGRAMOWA LINUX (może nie zawierać LLgen, wówczas instalacja ze strony http://tack.sourceforge.net); WINDOWS (używa się wtedy programu Cygwin,
2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje
iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 5. Stałe i zmienne znakowe. Tablice. Wskaźniki do tablic. Operacje na wskaźnikach. Instrukcja switch, case. Wyrażenie przecinkowe. Funkcje
Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.
Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia
Wstęp do programowania. Wykład 1
Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.
Powtórka algorytmów. Wprowadzenie do języka Java.
Powtórka algorytmów. Wprowadzenie do języka Java. BEGIN Readln(a); Readln(b); Suma := 0; IF Suma < 10 THEN Writeln( Suma wynosi:, Suma); ELSE Writeln( Suma większa niż 10! ) END. 1. Narysować schemat blokowy
Gramatyki atrybutywne
Gramatyki atrybutywne, część 1 (gramatyki S-atrybutywne Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyki atrybutywne Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji
Generator skanerów Flex
Grzegorz Jacek Nalepa 17.7.2000, Kraków, Revision : 1.5 Streszczenie Artykuł prezentuje generator skanerów leksykalnych Flex, będący implementacją standardowego pakietu Lex. Zawarte jest krótkie wprowadzenie
Języki formalne i automaty Ćwiczenia 1
Języki formalne i automaty Ćwiczenia Autor: Marcin Orchel Spis treści Spis treści... Wstęp teoretyczny... 2 Wprowadzenie do teorii języków formalnych... 2 Gramatyki... 5 Rodzaje gramatyk... 7 Zadania...
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać
Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Tablica znaków w językach C i C++ (oraz pochodnych) łańcuch znaków przechowywany jest jako
Microsoft IT Academy kurs programowania
Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego
Jerzy Nawrocki, Wprowadzenie do informatyki
Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Przetwarzanie tekstów i AWK Problem konwersji plików FName:Jurek SName:Busz Salary 585 FName:Alek
Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u
Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u będziemy używać w taki sam sposób, jak wbudowanych funkcji
OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)
Sed edytor strumieniowy,sed wczytuje bieżący wiersz pliku do wewnętrznego bufora celem manipulowania tekstem. Wynik jest wysyłany na standardowe wyjście. Oryginalny plik nie jest nigdy zmieniany. Jeżeli
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
Wprowadzenie do analizy leksykalnej. Bartosz Bogacki.
Wprowadzenie do analizy leksykalnej Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład w którym wezmą Państwo udział dotyczy wprowadzenia do analizy leksykalnej. Zapraszam serdecznie
ZADANIA Z AUTOMATU SKOŃCZONEGO SPRAWOZDANIE NR 4
ZADANIA Z AUTOMATU SKOŃCZONEGO SPRAWOZDANIE NR 4 Dla każdego zadania określić: graf przejść tablicę stanów automatu skończonego akceptującego określoną klasę słów podać dwa przykłady ilustrujące parę AS
Podstawy generatora YACC. Bartosz Bogacki.
Podstawy generatora YACC Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy generatora analizatorów składniowych YACC. Zapraszam serdecznie
#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 ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Autor: dr inż. Katarzyna Rudnik
Bazy danych Wykład 2 MS Access Obiekty programu, Reprezentacja danych w tabeli, Indeksy, Relacje i ich sprzężenia Autor: dr inż. Katarzyna Rudnik Obiekty programu MS ACCESS Obiekty typu Tabela są podstawowe
Struktury, unie, formatowanie, wskaźniki
Struktury, unie, formatowanie, wskaźniki 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12, na rzecz swoich 143209 poddanych uchwalił dekret o 20 procentowej
Podstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }
KURS C/C++ WYKŁAD 2 Instrukcje iteracyjne Instrukcja while Składnia tej instrukcji jest następująca: while (wyrażenie) instrukcja W pętli while wykonanie instrukcji powtarza się tak długo, jak długo wartość
Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/
Podstawy programowania C dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Tematy Struktura programu w C Typy danych Operacje Instrukcja grupująca Instrukcja przypisania Instrukcja warunkowa Struktura
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Wskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Typy danych, zmienne i tablice. Tomasz Borzyszkowski
Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?
JAO - Wprowadzenie do Gramatyk bezkontekstowych
JAO - Wprowadzenie do Gramatyk bezkontekstowych Definicja gramatyki bezkontekstowej Podstawowymi narzędziami abstrakcyjnymi do opisu języków formalnych są gramatyki i automaty. Gramatyka bezkontekstowa
Podstawy programowania w języku C
Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu
10. Translacja sterowana składnią i YACC
10. Translacja sterowana składnią i YACC 10.1 Charakterystyka problemu translacja sterowana składnią jest metodą generacji przetworników tekstu języków, których składnię opisano za pomocą gramatyki (bezkontekstowej)
Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1
Operatory Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1 Przypomnienie: operatory Operator przypisania = przypisanie x = y x y Operatory arytmetyczne
Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.
PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne
Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu
Problem Hilberta: 9 Czy istnieje ogólna mechaniczna procedura, która w zasadzie pozwoliłaby nam po kolei rozwiązać wszystkie matematyczne problemy (należące do odpowiednio zdefiniowanej klasy)? 2 Przykłady
Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory
Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Poniżej pozwoliłem sobie za cytować za wikipedią definicję zmiennej w informatyce.
int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania
Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,
Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:
Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe
Bloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
KURS C/C++ WYKŁAD 1. Pierwszy program
KURS C/C++ WYKŁAD 1 Pierwszy program Tworzenie programu odbywa sie w dwóch etapach: 1. opracowanie kodu źródłowego 2. generowanie kodu wynikowego Pierwszy etap polega na zapisaniu algorytmu za pomocą instrukcji