Generator YACC: gramatyki niejednoznaczne

Wielkość: px
Rozpocząć pokaz od strony:

Download "Generator YACC: gramatyki niejednoznaczne"

Transkrypt

1 Plan wykładu Generator YACC: gramatyki niejednoznaczne Wojciech Complak gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności i priorytetów w generatorze YACC problem tzw. wiszącego else używanie przypadków specjalnych w gramatykach niejednoznacznych 1.03 Generator YACC: gramatyki niejednoznaczne (2/39) Gramatyki jednoznaczne i niejednoznaczne Gramatyki jednoznaczne i niejednoznaczne gramatyka jest jednoznaczna wtedy, gdy dla każdego zdania należącego do języka opisanego gramatyką istnieje tylko jedno drzewo składniowe drzewo składniowe opisuje składnię, a nie znaczenie (semantykę), nie odzwierciedla więc kolejności zastępowania symboli w formach zdaniowych każdemu drzewu składniowemu odpowiada jeden unikalny wywód prawostronny (YACC) rozważmy niejednoznaczną gramatykę dla ciągu liczb rozdzielonych znakami odejmowania: - sprawdźmy teraz: jak będzie wyglądać drzewo składniowe dla zdania jaki będzie wynik (i kolejność) obliczeń analizatora wygenerowanego przez YACCa Generator YACC: gramatyki niejednoznaczne (3/39) Generator YACC: gramatyki niejednoznaczne (4/39) Drzewa wywodu zdania - skaner dla zdania - - istnieją dwa drzewa składniowe lewostronna łączność operatora odejmowania prawostronna łączność operatora odejmowania Generator YACC: gramatyki niejednoznaczne (5/39) analizator leksykalny ma za zadanie: rozpoznać i zwrócić znak odejmowania ( - ) rozpoznać liczbę całkowitą, dokonać jej konwersji i zwrócić jako atrybut symbolu NUM %{ #include <stdlib.h> #include "y.tab.h" %} \- { return } [0-9]+ { yylval = atoi(yytext) return NUM } Generator YACC: gramatyki niejednoznaczne (6/39)

2 z nieterminalem wiążemy akcje semantyczne: dla produkcji rezultatem będzie różnica argumentów operatora odejmowania dla produkcji NUM rezultatem będzie wartość liczby S : { printf("%d",$1) } : { $$ = $1 - $3 } NUM { $$ = $1 } Generator YACC: gramatyki niejednoznaczne (7/39) w trakcie generowania analizatora przez YACCa (MKS) otrzymujemy informację o pojedynczym konflikcie przesuń/redukuj: State 5 :. (2) :. [ $end ] Shift/reduce conflict (4,2) on shift 4. reduce (2) Conflicts: State Token Action 5 shift 4 5 reduce (2) Generator YACC: gramatyki niejednoznaczne (8/39) po skompilowaniu analizatora testujemy jego działanie dla wejścia , zamiast odpowiedzi -4 otrzymujemy jednak 2 analiza wywodu: [2] [1]-[-1] [1]-[2]-[3] [1]-[2]-[3] [1]-[2]-[3] [1]-[2]-[3] wskazuje, że problem leży w kolejności redukcji symboli formy zdaniowej - - operator odejmowania jest lewostronnie łączny, powinniśmy więc wybrać interpretację (1-2) - 3 a została wybrana (zgodnie z domyślnymi regułami YACCa): 1 - (2-3) w trakcie generowania analizatora otrzymujemy komunikat o konflikcie przesunięcie/redukcja w pozycji - - sposób rozstrzygnięcia tego konfliktu decyduje o łączności operatora (przesunięcie łączność prawostronna, redukcja łączność lewostronna) Generator YACC: gramatyki niejednoznaczne (9/39) Generator YACC: gramatyki niejednoznaczne (10/39) domyślne reguły rozstrzygania konfliktów przez generator YACCa: konflikt przesunięcie/redukcja jest rozstrzygany na korzyść przesunięcia konflikt redukcja/redukcja - na korzyść redukcji zgodnie z wcześniejszą tekstową produkcją w specyfikacji w rozpatrywanym przykładzie domyślna reguła rozstrzygania konfliktów nie dała oczekiwanej łączności operatora odejmowania Generator YACC: gramatyki niejednoznaczne (11/39) czy jest w takim razie sens stosować gramatyki niejednoznaczne? gramatyki niejednoznaczne mają istotne zalety: są proste, łatwiej je modyfikować i rozbudowywać analizatory są efektywniejsze łatwo jest uwzględnić przypadki specjalne konieczne jest jedynie odpowiednie wskazanie sposobu rozstrzygnięcia konfliktów za pomocą słów kluczowych YACCa Generator YACC: gramatyki niejednoznaczne (12/39)

3 Porównanie złożoności gramatyk Porównanie złożoności gramatyk gramatyka jednoznaczna S : {printf("%d",$1)} : '+' T {$$=$1+$3} T {$$=$1-$3} T {$$=$1} T : T '*' F {$$=$1*$3} T '/' F {$$=$1/$3} F {$$=$1} F : '(' ')' {$$=$2} NUM {$$=$1} '+' F {$$=$2} F {$$=-$2} gramatyka niejednoznaczna %left '+' %left '*' '/' %left UMINUS L : {printf("%d",$1)} : '+' {$$=$1+$3} '+' %prec UMINUS {$$=$2} {$$=$1-$3} %prec UMINUS {$$=-$2 } '*' {$$=$1*$3} '/' {$$=$1/$3} '(' ')' {$$=$2} NUM {$$=$1} Generator YACC: gramatyki niejednoznaczne (13/39) gramatyka jednoznaczna /* 1 */ : '+' T /* 2 */ T /* 3 */ T /* 4 */ T : T '*' F /* 5 */ T '/' F /* 6 */ F /* 7 */ F : '(' ')' /* 8 */ NUM /* 9 */ '+' F /* 10 */ F gramatyka niejednoznaczna /* 1 */ : '+' /* 2 */ '+' /* 3 */ /* 4 */ /* 5 */ '*' /* 6 */ '/' /* 7 */ '(' ')' /* 8 */ NUM Generator YACC: gramatyki niejednoznaczne (14/39) gramatyka jednoznaczna S : {printf("%d",$1)} : '+' T {$$=$1+$3 printf("r1([%d]->[%d]+t[%d]) ",$$,$1,$3)} T {$$=$1-$3 printf("r2([%d]->[%d]-t[%d]) ",$$,$1,$3)} T {$$=$1 printf("r3([%d]->t[%d]) ",$$,$1)} T : T '*' F {$$=$1*$3 printf("r4(t[%d]->t[%d]*f[%d]) ",$$,$1,$3)} T '/' F {$$=$1/$3 printf("r5(t[%d]->t[%d]/f[%d]) ",$$,$1,$3)} F {$$=$1 printf("r6(t[%d]->f[%d]) ",$$,$1)} F : '(' ')' {$$=$2 printf("r7(f[%d]->([%d])) ",$$,$2)} NUM {$$=$1 printf("r8(f[%d]->num[%d]) ",$$,$1)} '+' F {$$=$2 printf("r9(f[%d]->+f[%d]) ",$$,$2)} F {$$=-$2 printf("r10(f[%d]->-f[%d]) ",$$,$2)} Generator YACC: gramatyki niejednoznaczne (15/39) gramatyka niejednoznaczna %left '+' %left '*' '/' %left UMINUS L : { printf("%d",$1) } : '+' {$$=$1+$3 printf("r1([%d]->[%d]+[%d]) ",$$,$1,$3)} '+' %prec UMINUS {$$=$2 printf("r2([%d]->+[%d]) ",$$,$2)} {$$=$1-$3 printf("r3([%d]->[%d]-[%d]) ",$$,$1,$3)} %prec UMINUS {$$=-$2 printf("r4([%d]->-[%d]) ",$$,$2)} '*' {$$=$1*$3 printf("r5([%d]->[%d]*[%d]) ",$$,$1,$3)} '/' {$$=$1/$3 printf("r6([%d]->[%d]/[%d]) ",$$,$1,$3)} '(' ')' {$$=$2 printf("r7([%d]->([%d])) ",$$,$2)} NUM {$$=$1 printf("r8([%d]->num[%d]) ",$$,$1)} Generator YACC: gramatyki niejednoznaczne (16/39) złożoność czasowa dla najprostszego poprawnego wejścia (pojedynczej liczby), np.: 2 gramatyka jednoznaczna 3 redukcje: r8(f[2]->num[2]),r6(t[2]->f[2]),r3([2]->t[2]) gramatyka niejednoznaczna 1 redukcja: r8([2]->num[2]) w tym prostym przypadku różnica wydajności jest bardzo duża (3-krotna) jak będzie wyglądać sytuacja dla większego rozmiaru wejścia? Generator YACC: gramatyki niejednoznaczne (17/39) złożoność czasowa dla wyrażenia: 2+3*4-1 jednoznaczna 11 redukcji: r8(f[2]->num[2]), r6(t[2]->f[2]), r3([2]->t[2]), r8(f[3]->num[3]), r6(t[3]->f[3]), r8(f[4]->num[4]), r4(t[12]->t[3]*f[4]), r1([14]->[2]+t[12]), r8(f[1]->num[1]), r6(t[1]->f[1]), r2([13]->[14]-t[1]) niejednoznaczna 7 redukcji: r8([2]->num[2]), r8([3]->num[3]), r8([4]->num[4]), r5([12]->[3]*[4]), r1([14]- >[2]+[12]), r8([1]->num[1]), r3([13]->[14]- [1]) Generator YACC: gramatyki niejednoznaczne (18/39)

4 jak opisać łączność i priorytet operatorów w YACCu? większość operatorów arytmetycznych ma lewostronne wiązanie definiujemy ich wiązanie za pomocą słowa kluczowego %left %left S : { printf("%d",$1) } : { $$ = $1 - $3 } NUM { $$ = $1 } Generator YACC: gramatyki niejednoznaczne (19/39) priorytet instrukcji wynika z priorytetu najbardziej prawego tokenu niewielka (ale nieprzemyślana) modyfikacja gramatyki powoduje powstanie konfliktów %left S : { printf("%d",$1) } : ' ' ' ' { $$ = $1 - $5 } NUM { $$ = $1 } Generator YACC: gramatyki niejednoznaczne (20/39) operator dodawania operatory mogą mieć trzy typy wiązań dla każdego typu przewidziano w YACCu odpowiednie słowo kluczowe: %left wiązanie lewostronne %right wiązanie prawostronne %nonassoc brak wiązania Generator YACC: gramatyki niejednoznaczne (21/39) dodajmy teraz do gramatyki operator dodawania ( + ) o takim samym priorytecie i wiązaniu jak operator odejmowania ( - ) %left '+' S : { printf("%d",$1) } : '+' { $$ = $1 + $3 } { $$ = $1 - $3 } NUM { $$ = $1 } Generator YACC: gramatyki niejednoznaczne (22/39) operatory multiplikatywne operator potęgowania następnie uzupełnijmy gramatykę o operatory multiplikatywne (mnożenia i dzielenia) i definiujemy ich priorytet i łączność %left '+' %left '*' '/' : '+' { $$ = $1 + $3 } { $$ = $1 - $3 } '*' { $$ = $1 * $3 } '/' { $$ = $1 / $3 } NUM { $$ = $1 } Generator YACC: gramatyki niejednoznaczne (23/39) w celu przypisania operatorowi prawostronnego wiązania należy użyć słowa kluczowego %right w językach programowania stosunkowo niewiele operatorów ma prawostronne wiązanie, np.: potęgowanie (operator ** albo ^) przypisanie (=) w języku C prawostronne wiązanie operatora potęgowania (np. ^) oznacza, że wyrażenie 2 ^ 3 ^ 2 jest interpretowane jako 2 ^ (3 ^ 2) Generator YACC: gramatyki niejednoznaczne (24/39)

5 operator potęgowania operatory bez wiązania dodanie do kalkulatora operatora potęgowania np. w postaci takiej jak w języku AWK (prawostronnie wiążący ^ ), wymaga: rozbudowania skanera o regułę: \^ { return '^' } oraz parsera o: deklarację: %right '^ produkcję: : '^' z akcją: {$$=(int)pow($1,$3)} Generator YACC: gramatyki niejednoznaczne (25/39) w celu określenia, że operator nie ma wiązania używamy słowa kluczowego %nonassoc przykładem takiego operatora jest porównanie (=) w Pascalu, w którym poprawne jest wyrażenie: a = b ale nie: a = b = c które należy zapisać np. jako: (a = b) = c modyfikujemy gramatykę dodając: deklarację %nonassoc '=' produkcję : '=' (z odpowiednimi akcjami) Generator YACC: gramatyki niejednoznaczne (26/39) unarny minus unarny minus poprawne rozbudowanie gramatyki o unarny minus wymaga specjalnych zabiegów wydaje się, że wystarczy dodanie produkcji : - z akcją semantyczną { $$ = -$2 } czy jest to jednak dobre podejście? generacja analizatora brak konfliktów ( ) testy: => -5 ( ) - 4 * - 2 => 8 ( ) - 8 / - 4 / - 2 => -4 (, powinno być -1) błąd wynika z faktu, że produkcja - ma taki priorytet jak operator -, niższy od priorytetu operatora / (i produkcji / ) problem powstaje w pozycji - /, kiedy to powinna nastąpić redukcja, ale skoro operator / ma wyższy priorytet od - zostanie wykonane przesunięcie wyrażenie zostaje źle zinterpretowane jako: -8 / ( -4 / -2) Generator YACC: gramatyki niejednoznaczne (27/39) Generator YACC: gramatyki niejednoznaczne (28/39) unarny minus unarny plus należy więc przypisać produkcji - wyższy priorytet niż operatorom * i / modyfikowanie priorytetu operatora - jest bezcelowe (minus unarny i binarny można rozróżnić dopiero na poziomie produkcji) problem można rozwiązać definiując pomocniczy token, np.: %token UMINUS a następnie za pomocą słowa kluczowego %prec przypisując jego priorytet produkcji: : %prec UMINUS {$$=-$2} Generator YACC: gramatyki niejednoznaczne (29/39) w niektórych językach dostępny jest również unarny plus obsługa unarnego plusa wymaga takich samych zabiegów, jak w przypadku unarnego minusa (można wykorzystać ten sam pomocniczy token) jeżeli zignorujemy ten problem, to kalkulator potraktuje np. + 8 / + 4 / + 2 jak + 8 / (+ 4 / + 2) i poda błędną odpowiedź: 4 zamiast poprawnej: 1 Generator YACC: gramatyki niejednoznaczne (30/39)

6 wiszące else wiszące else problem tzw. wiszącego else występuje w tych językach (np.: C, C++, Pascal), w których: instrukcja warunkowa ma opcjonalną część else i jednocześnie nie ma słowa (słów) kluczowego kończącego instrukcję warunkową zamknięcie instrukcji warunkowej przewidziano m. in. w Algolu 68 (fi), języku powłoki systemu UNIX (fi), Adzie (end if) i Moduli-2 (end) Generator YACC: gramatyki niejednoznaczne (31/39) problem wiszącego else (na przykładzie składni języka Pascal) polega na tym, że instrukcja: if a then if b then writeln('b') else writeln('c') może być interpretowana na dwa sposoby: if a then begin if b then writeln('b') else writeln('c') end { a } if a then begin if b then writeln('b') end else writeln('c') { b } Generator YACC: gramatyki niejednoznaczne (32/39) wiszące else wiszące else poprawna jest oczywiście interpretacja {a} wiążąca część else z bezpośrednio poprzedzającą ją instrukcją if-then zapiszmy instrukcję warunkową w YACCu: S : IF THN S IF THN S LS S nieterminale S i, to odpowiednio instrukcja i wyrażenie terminale IF, THN, LS reprezentują słowa kluczowe języka Pascal Generator YACC: gramatyki niejednoznaczne (33/39) w typowej gramatyce instrukcje nie mają priorytetów w wyniku czego powstaje konflikt przesunięcie/redukcja w pozycji: IF THN S LS S czy po przeczytaniu części if-then, widząc na wejściu else należy wykonać redukcję czy przesunięcie? konflikt zostanie rozstrzygnięty zgodnie z domyślnymi regułami na korzyść przesunięcia (i właściwej interpretacji instrukcji if-then-else) Generator YACC: gramatyki niejednoznaczne (34/39) wiszące else przypadki specjalne rozwiązanie tego konfliktu wymaga: przypisania terminalowi LS prawostronnego wiązania oraz przypisania części if-then takiego samego priorytetu jaki ma terminal LS: %right LS S : IF THN S IF THN S LS S %prec LS Generator YACC: gramatyki niejednoznaczne (35/39) fragment gramatyki preprocesora QN do składania równań (Kernighan & Cherry): %token sub sup : sub sup /* */ sub /* */ sup /* */... konflikty przesunięcie/redukcja można usunąć definiując łączność terminali sub i sup: %right sub sup Generator YACC: gramatyki niejednoznaczne (36/39)

7 przypadki specjalne przypadki specjalne konflikt redukcja/redukcja jest związany z produkcjami: sub sup sup w pozycji: sub sup sup YACC wykrywa konflikt redukcja/redukcja zgodnie z którą produkcją ma wykonać redukcję i jak wskazać generatorowi właściwy wybór? Generator YACC: gramatyki niejednoznaczne (37/39) obsłużenie przypadku specjalnego wymaga wybrania redukcji zgodnie z produkcją: sub sup a więc należy nadać jej wyższy priorytet modyfikowanie priorytetu tokenu sup jest bezcelowe (priorytet obu produkcji pochodzi właśnie od niego) wystarczy użyć domyślnych reguł produkcja, która ma mieć wyższy priorytet musi być tekstowo pierwsza w specyfikacji Generator YACC: gramatyki niejednoznaczne (38/39) Dalsza lektura podręczniki YACCa: Bison (klon YACCa): Johnson S. C., YACC: Yet Another Compiler-Compiler, Unix Programmer's Manual Vol 2b, 1979 Levine J., Mason T., Brown D., lex & yacc, 2nd edition, O'Reilly, 1992 MKS LX & YACC, Reference Manual, MKS Software Inc., 2004 gramatyki niejednoznaczne Aho A. V., Sethi R., Ullman J. D., Compilers: Principles, Techniques, and Tools, Addison-Wesley, 1986 Generator YACC: gramatyki niejednoznaczne (39/39)

Generator YACC: gramatyki niejednoznaczne

Generator YACC: gramatyki niejednoznaczne Generator YACC: gramatyki niejednoznaczne Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności

Bardziej szczegółowo

Podstawy generatora YACC. Bartosz Bogacki.

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

Bardziej szczegółowo

Metody Kompilacji Wykład 1 Wstęp

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,

Bardziej szczegółowo

Bison - generator analizatorów składniowych

Bison - generator analizatorów składniowych Bison - generator analizatorów składniowych Spis treści: 1. Wprowadzenie 2. Specyfikacja Deklaracje Reguły Procedury pomocnicze 3. Prosty przykład 4. Uruchamianie 5. Rozstrzyganie niejednoznaczności Konflikty

Bardziej szczegółowo

Translacja sterowana składnią w generatorze YACC

Translacja sterowana składnią w generatorze YACC Translacja sterowana składnią w generatorze YACC Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu zasady implementacji translacji sterowanej składnią w generatorze YACC korzystanie z atrybutów

Bardziej szczegółowo

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Wprowadzenie do analizy składniowej. Bartosz Bogacki. Wprowadzenie do analizy składniowej Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy wprowadzenia do analizy składniowej. Zapraszam serdecznie

Bardziej szczegółowo

10. Translacja sterowana składnią i YACC

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)

Bardziej szczegółowo

Gramatyka operatorowa

Gramatyka operatorowa Gramatyki z pierwszeństwem operatorów Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyka operatorowa Definicja: G = G BK jest gramatyką operatorową (i) (ii) G jest gramatyką

Bardziej szczegółowo

Generator LLgen. Wojciech Complak Generator LLgen - charakterystyka. Generator LLgen -składnia specyfikacji

Generator LLgen. Wojciech Complak Generator LLgen - charakterystyka. Generator LLgen -składnia specyfikacji Plan wykładu Wojciech Complak Wojciech.Complak@cs.put.poznan.pl charakterystyka generatora LLgen składnia specyfikacji analizatora składniowego dołączanie analizatora leksykalnego rozszerzenia składni

Bardziej szczegółowo

Wykład 5. Jan Pustelnik

Wykład 5. Jan Pustelnik Wykład 5 Jan Pustelnik Konstruowanie parsera Istnieje kilka podstawowych metod konstrukcji parsera bez nawracania Ze względów wydajnościowych parser bez nawracania jest jedynym sensownym rozwiązaniem (prawo

Bardziej szczegółowo

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team Flex a generatory skanerów C++ 2 sposoby wymuszenia stworzenia skanera w C++ flex -+ flexfile.l użycie %option

Bardziej szczegółowo

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

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)

Bardziej szczegółowo

Metody Kompilacji Wykład 3

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

Bardziej szczegółowo

Podstawy Kompilatorów

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

Bardziej szczegółowo

Generatory analizatorów

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

Bardziej szczegółowo

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

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

Bardziej szczegółowo

Gramatyki atrybutywne

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

Bardziej szczegółowo

Wprowadzenie. Wojciech Complak

Wprowadzenie. Wojciech Complak Wprowadzenie Wojciech Complak Wojciech.Complak@cs.put.poznan.pl Przedmiot Podstawy kompilatorów, wykład 1, Wprowadzenie, prezentuje Wojciech Complak. Witam Państwa na pierwszym wykładzie z przedmiotu Podstawy

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

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

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 12 Analiza zależności kontekstowych. Zadanie 1: Proszę napisać analizator zgodności typów dla podzbioru standardowych wyrażeń języka Pascal. Dla uproszczenia należy założyć,

Bardziej szczegółowo

JIP. Analiza składni, gramatyki

JIP. Analiza składni, gramatyki JIP Analiza składni, gramatyki Książka o różnych językach i paradygmatach 2 Polecam jako obowiązkową lekturę do przeczytania dla wszystkich prawdziwych programistów! Podsumowanie wykładu 2 3 Analiza leksykalna

Bardziej szczegółowo

Zadanie analizy leksykalnej

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:

Bardziej szczegółowo

Analizator syntaktyczny

Analizator syntaktyczny Analizator syntaktyczny program źródłowy analizator leksykalny token daj nast. token analizator syntaktyczny drzewo rozbioru syntaktycznego analizator semantyczny kod pośredni tablica symboli Analizator

Bardziej szczegółowo

Program We Kompilator Wy Źródłowy

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

Bardziej szczegółowo

Metody Kompilacji Wykład 13

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

Bardziej szczegółowo

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

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem. Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -

Bardziej szczegółowo

Semantyka i Weryfikacja Programów - Laboratorium 6

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

Bardziej szczegółowo

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

Bardziej szczegółowo

KONSTRUKCJA KOMPILATORÓW

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,

Bardziej szczegółowo

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5. Operatory w Javie W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje wykonywane są na operandach (argumentach

Bardziej szczegółowo

Podstawy kompilatorów. Generator LLgen. Wojciech Complak.

Podstawy kompilatorów. Generator LLgen. Wojciech Complak. Generator LLgen Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu charakterystyka generatora LLgen składnia specyfikacji analizatora składniowego dołączanie analizatora leksykalnego rozszerzenia

Bardziej szczegółowo

Translacja wprowadzenie

Translacja wprowadzenie Translacja wprowadzenie Teoria kompilacji Dr inż. Janusz Majewski Katedra Informatyki Literatura 1) Aho A. V., Sethi R., Ullman J. D.: Compilers. Principles, Techniques and Tools, Addison- Wesley, 1986

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

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,

Bardziej szczegółowo

Translacja sterowana składnią w metodzie zstępującej

Translacja sterowana składnią w metodzie zstępującej Translacja sterowana składnią w metodzie zstępującej Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu translacja sterowana składnią definicje sterowane składnią i schematy translacji atrybuty

Bardziej szczegółowo

Odczyt danych z klawiatury Operatory w Javie

Odczyt danych z klawiatury Operatory w Javie Odczyt danych z klawiatury Operatory w Javie Operatory W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje

Bardziej szczegółowo

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne J.Nawrocki, M. Antczak, A. Hoffa, S. Wąsik Plik źródłowy: 08cw11-tr.doc; Data: 2009-01-15 09:47:00 Ćwiczenia nr 11 Translatory Wprowadzenie teoretyczne Wiele dokumentów wprowadzających do języków Lex oraz

Bardziej szczegółowo

ForPascal Interpreter języka Pascal

ForPascal Interpreter języka Pascal Akademia Podlaska w Siedlcach Wydział Nauk Ścisłych Instytut Informatyki ForPascal Interpreter języka Pascal Przedmiot: Sieci i Systemy Wirtualne Informatyka IV Prowadzący: dr Krzysztof Trojanowski Grupa:

Bardziej szczegółowo

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

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk Plan wykładu (1) Paweł J. Matuszyk AGH Kraków 1 2 tor leksykalny tor syntaktyczny Generator pośredniego Generator wynikowego Hopcroft J. E., Ullman J. D., Wprowadzenie do teorii automatów, języków i obliczeń,

Bardziej szczegółowo

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

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe Wydział Zarządzania AGH Katedra Informatyki Stosowanej Podstawy VBA cz. 1 Programowanie 1 Program wykładu Struktura programu Instrukcja przypisania Wprowadzanie danych Wyprowadzanie wyników Instrukcja

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2 Wprowadzania liczb Liczby wpisywane w komórce są wartościami stałymi. W Excel'u liczba może zawierać tylko następujące znaki: 0 1 2 3 4 5 6 7 8 9 + - ( ), / $ %. E e Excel ignoruje znaki plus (+) umieszczone

Bardziej szczegółowo

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

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa Informatyka 1 Wykład III Wyrażenia i instrukcje, złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: składnia wyrażeń, drzewa rozbioru gramatycznego i wyliczenia wartości wyrażeń, operatory

Bardziej szczegółowo

Wykład 10. Translacja sterowana składnią

Wykład 10. Translacja sterowana składnią Wykład 10 Translacja sterowana składnią Translacja sterowana składnią Z konstrukcjami języków programowania wiąże się pewną informację przez dołączenie atrybutów do symboli gramatyki reprezentujących te

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Gramatyki bezkontekstowe I Gramatyką bezkontekstową

Bardziej szczegółowo

Języki i paradygmaty programowania

Języki i paradygmaty programowania Języki i paradygmaty programowania Instytut Teleinformatyki ITI PK Kraków marzec 2012 Spis rzeczy 1 Operatory w C/C++ Operatory Operatory w C/C++ operator - rodzaj funkcji wbudowanej w język; różnica notacja

Bardziej szczegółowo

Podstawy programowania w języku C i C++

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,

Bardziej szczegółowo

Metody Realizacji Języków Programowania

Metody Realizacji Języków Programowania 1/54 Metody Realizacji Języków Programowania Analiza składniowa wstępujaca Marcin Benke MIM UW 9 stycznia 2015 2/54 Analiza wstępujaca metoda LR Od Lewej, prawostronne wyprowadzenie (w odwrotnej kolejności)

Bardziej szczegółowo

Analiza leksykalna i generator LEX

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Analiza metodą zstępującą. Bartosz Bogacki.

Analiza metodą zstępującą. Bartosz Bogacki. Analiza metodą zstępującą Bartosz Bogacki Bartosz.Bogacki@cs.put.poznan.pl Witam Państwa. Wykład, który za chwilę Państwo wysłuchają dotyczy analizy metodą zstępującą. Zapraszam serdecznie do wysłuchania.

Bardziej szczegółowo

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch. Instrukcje warunkowe i skoku. Spotkanie 2 Dr inż. Dariusz JĘDRZEJCZYK Wyrażenia i operatory logiczne Instrukcje warunkowe: if else, switch Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania

Bardziej szczegółowo

Definiowanie języka przez wyrażenie regularne(wr)

Definiowanie języka przez wyrażenie regularne(wr) Wykład3,str1 Definiowanie języka przez wyrażenie regularne(wr) DEFINICJA: (wyrażenia regularne) M(specjalneznakinienależącedoalfabetu:{,},, ) literyalfabetusąwr złożeniawrsąwr: jeśliw 1 iw 2 sąwr,to{w

Bardziej szczegółowo

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

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? Po co wydziela się analizę leksykalną? Wykład7,str1 Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona? 1 Analiza leksykalna jest prostsza niż składniowa leksyka

Bardziej szczegółowo

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

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 4. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Obliczenia matematyczne (operatory) Operator

Bardziej szczegółowo

0.1 Lewostronna rekurencja

0.1 Lewostronna rekurencja 0.1 Lewostronna rekurencja Sprawdź czy poniższa gramatyka E jest zgodna z LL(1), tzn. czy umożliwia przeprowadzenie analizy bez powrotu z wyprzedzeniem o jeden symbol. Wyjaśnienie pojęcia LL(1): Pierwsze

Bardziej szczegółowo

Analiza zależności kontekstowych

Analiza zależności kontekstowych Analiza zależności kontekstowych Wojciech Complak Wojciech.Complak@cs.put.poznan.pl 1 Plan wykładu zależności kontekstowe statyczne i dynamiczne sprawdzanie zależności kontekstowych systemy typów kontroler

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

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

Bardziej szczegółowo

Uproszczony schemat działania kompilatora

Uproszczony schemat działania kompilatora Uproszczony schemat działania kompilatora Wykład7,str.1 program źródłowy ciąg leksemów drzewo wywodu drzewo i tablice symboli analiza leksykalna analiza syntaktyczna analiza semantyczna KOMPILATOR generacja

Bardziej szczegółowo

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo Operatory w C++ Operatory arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie % modulo Operatory relacyjne (porównania) < mniejszy niż większy niż >= większy lub równy

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

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

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. Podstawy programowania Programowanie wyrażeń 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń. W językach programowania są wykorzystywane

Bardziej szczegółowo

Semantyka i Weryfikacja Programów - Laboratorium 3

Semantyka i Weryfikacja Programów - Laboratorium 3 Semantyka i Weryfikacja Programów - Laboratorium 3 Modelowanie układów mikroprocesorowych - część II Wykonywanie całego programu Cały program wykonywany jest przez funkcję intpprog. Jedynym argumentem

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

ZYKI BEZKONTEKSTOWE (KLASA

ZYKI BEZKONTEKSTOWE (KLASA Spis treści 6. JĘZYKI BEZKONTEKSTOWE (KLASA "2")... 2 6.1. GRAMATYKI BEZKONTEKSTOWE... 2 6.2. AUTOMATY ZE STOSEM... 12 7. DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I ICH AKCEPTORY... 16 7.1. GRAMATYKI I JĘZYKI

Bardziej szczegółowo

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux)

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux) Zajęcia P2AM. Analizator składniowy (Flex + Bon, Lux) 1. Cel ćwiczeń Celem ćwiczeń jest stworzenie analizatora składniowego dla języka będącego podzbiorem języka wysokiego poziomu (Ada lub Modula2). Przy

Bardziej szczegółowo

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego 2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego Gramatyka Gramatyką G nazywamy czwórkę uporządkowaną G = gdzie: N zbiór symboli nieterminalnych, T zbiór symboli terminalnych, P zbiór

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel Gramatyki (1-2) Definiowanie języków programowania Piotr Chrząstowski-Wachjtel Zagadnienia Jak zdefiniować język programowania? Gramatyki formalne Definiowanie składni Definiowanie semantyki l 2 Pożądane

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 1 Celem laboratorium jest zapoznanie się ze środowiskiem i sprawdzenie poprawności działania narzędzi. Nazwy programów i rezultaty będą takie same w systemie operacyjnym

Bardziej szczegółowo

Języki formalne i gramatyki

Języki formalne i gramatyki J.Nawrocki, M. Antczak, A. Hoffa, S. Wąsik Plik źródłowy: 08cw10-jfig.doc; Data: 2008-10-22 13:29:00 Ćwiczenie nr 10 Języki formalne i gramatyki Wprowadzenie 1. Napisz analizator leksykalny (LEX) i analizator

Bardziej szczegółowo

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

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe Wydział Zarządzania AGH Katedra Informatyki Stosowanej Podstawy VBA cz. 2 Programowanie 1 Program wykładu Typy danych Wyrażenia Operatory 2 VBA Visual Basic dla aplikacji (VBA) firmy Microsoft jest językiem

Bardziej szczegółowo

JĘZYKIFORMALNE IMETODYKOMPILACJI

JĘZYKIFORMALNE IMETODYKOMPILACJI Stefan Sokołowski JĘZYKIFORMALNE IMETODYKOMPILACJI Inst. Informatyki Stosowanej, PWSZ Elbląg, 2009/2010 JĘZYKI FORMALNE reguły gry Wykład1,2X2009,str.1 Zasadnicze informacje: http://iis.pwsz.elblag.pl/

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

Bardziej szczegółowo

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

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

Bardziej szczegółowo

JĘZYKI FORMALNE I METODY KOMPILACJI

JĘZYKI FORMALNE I METODY KOMPILACJI Stefan Sokołowski JĘZYKI FORMALNE I METODY KOMPILACJI Inst Informatyki Stosowanej, PWSZ Elbląg, 2015/2016 JĘZYKI FORMALNE reguły gry Wykład1,str1 Zasadnicze informacje: http://iispwszelblagpl/ stefan/dydaktyka/jezform

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Podstawy Kompilatorów

Podstawy Kompilatorów Podstawy Kompilatorów Laboratorium 9 Uwaga: Do wykonania poniższych zadań związanych z implementacją niezbędny jest program LEX, program YACC oraz kompilator języka C. Dla środowiska Linux mogą to być:

Bardziej szczegółowo

Metodologie programowania

Metodologie programowania Co kształtuje języki programowania? Wykład2,str.1 Metodologie programowania Koszty obliczeń: 1980 1960:sprzętdrogi,a wysiłek programistów niewielki 1970: sprzęt coraz tańszy, a programowane problemy coraz

Bardziej szczegółowo

Algorytmika i Programowanie VBA 1 - podstawy

Algorytmika i Programowanie VBA 1 - podstawy Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START uruchamianie środowiska VBA w Excelu Alt-F11 lub Narzędzia / Makra / Edytor Visual Basic konfiguracja środowiska VBA przy

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Plan wynikowy z wymaganiami edukacyjnymi z matematyki w zakresie podstawowym dla klasy 1 zsz Katarzyna Szczygieł

Plan wynikowy z wymaganiami edukacyjnymi z matematyki w zakresie podstawowym dla klasy 1 zsz Katarzyna Szczygieł Plan wynikowy z wymaganiami edukacyjnymi z matematyki w zakresie podstawowym dla klasy 1 zsz Katarzyna Szczygieł Lp. Temat Kształcone umiejętności 1 Zasady pracy na lekcjach matematyki. Dział I. LICZBY

Bardziej szczegółowo

Wykład 2 Składnia języka C# (cz. 1)

Wykład 2 Składnia języka C# (cz. 1) Wizualne systemy programowania Wykład 2 Składnia języka C# (cz. 1) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Budowa projektu 2 Struktura programu

Bardziej szczegółowo

Analiza semantyczna. Gramatyka atrybutywna

Analiza semantyczna. Gramatyka atrybutywna Analiza semantyczna Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji na temat składni języka podlegającego tłumaczeniu, translator musi posiadać możliwość korzystania z wielu innych informacji

Bardziej szczegółowo

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

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1) Wprowadzenie Teoria automatów i języków formalnych Dr inŝ. Janusz Majewski Katedra Informatyki Literatura (1) 1. Aho A. V., Sethi R., Ullman J. D.: Compilers. Principles, Techniques and Tools, Addison-Wesley,

Bardziej szczegółowo

Języki formalne i automaty Ćwiczenia 2

Języki formalne i automaty Ćwiczenia 2 Języki formalne i automaty Ćwiczenia 2 Autor: Marcin Orchel Spis treści Spis treści... 1 Wstęp teoretyczny... 2 Metoda brute force... 2 Konwersja do postaci normalnej Chomskiego... 5 Algorytm Cocke a-youngera-kasamiego

Bardziej szczegółowo

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

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

Bardziej szczegółowo

1 Przygotował: mgr inż. Maciej Lasota

1 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 1 1/7 Język C Instrukcja laboratoryjna Temat: Programowanie w powłoce bash (shell scripting) 1 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do programowania w powłoce Skrypt powłoki

Bardziej szczegółowo

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania http://torus.uck.pk.edu.pl/~fialko Operatory, wyrażenia, instrukcja przypisania Operatory arytmetyczne * / + - % operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania,

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Cel wykładu Programowanie imperatywne i język C Zaprezentować paradygmat programowania imperatywnego

Bardziej szczegółowo

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA Stefan Sokołowski ZAAWANSOWANE JĘZYKI PROGRAMOWANIA Inst. Informatyki, UG Gdańsk, 2015/2016 Zaawansowane Języki Programowania Wykład1,str.1 Na http://sigma.ug.edu.pl/ stefan/dydaktyka/zaawjezprog będą

Bardziej szczegółowo

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

5. JĘZYKI BEZKONTEKSTOWE (KLASA "2") GRAMATYKI BEZKONTEKSTOWE AUTOMATY ZE STOSEM DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I

5. JĘZYKI BEZKONTEKSTOWE (KLASA 2) GRAMATYKI BEZKONTEKSTOWE AUTOMATY ZE STOSEM DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I 5. JĘZYKI BEZKONTEKSTOWE (KLASA "2")...2 5.1. GRAMATYKI BEZKONTEKSTOWE...2 5.2. AUTOMATY ZE STOSEM...12 6. DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I ICH AKCEPTORY...16 6.1. GRAMATYKI I JĘZYKI LR...16 7.

Bardziej szczegółowo

JAO - Wprowadzenie do Gramatyk bezkontekstowych

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

Bardziej szczegółowo