PARADYGMATY I JĘZYKI PROGRAMOWANIA. lex/flex i yacc/bison w- 4 (2014)
|
|
- Magda Baranowska
- 7 lat temu
- Przeglądów:
Transkrypt
1 PARADYGMATY I JĘZYKI PROGRAMOWANIA lex/flex i yacc/bison w- 4 (2014)
2 Kompilator 2 faza wstępna faza końcowa faza postkońcowa Skaner Parser Analizator semantyki Optymizator Generator kodu
3 lexer/scanner 3 Analiza leksykalna proces zamiany ciągów znaków na ciąg tokenów x = 4 3*2 LEKSEM TOKEN x ZMIENNA = PRZYPISANIE 4 LICZBA - O_MINUS 3 LICZBA * O_MUL 2 LICZBA
4 parser 4 Analiza syntaktyczna analiza ciągów tokenów (leksemów); ich struktura gramatyczna; błędy składni LEKSEM TOKEN x ZMIENNA = PRZYPISANIE 4 LICZBA - O_MINUS 3 LICZBA * O_MUL 2 LICZBA x = 4 3*2 = x - 4 * 3 2 ^ 4
5 Analizator semantyki 5 Analiza semantyczna znaczenie n np. sprawdzanie typów, wiązanie obiektów, etc. Kod: double a = "napis"; Błąd analizy semantycznej: error: incompatible types in initialization
6 Optymalizator 6 zmniejszenie/zwiększenie pewnych własności programu wynikowego np. przyspieszenie programu
7 Generator kodu 7 Generacja kodu proces, w którym kompilator zamienia program źródłowy na wykonywalny, maszynowy x = a + b * c load c! mul b! add a! store x!
8 8 lex/flex & yacc/bison
9 lex/flex 9 lex narzędzie do budowy analizatorów leksykalnych M.E. Lesk i E. Schmidt (Lex A Lexical Analyzer Generator) obecnie rzadko używany flex (fast lexical analyzer generator) Open source (darmowy)
10 yacc/bison 10 yacc narzędzie do tworzenia analizatorów syntaktycznych (S.C. Johnson. Yacc: Yet Another Compiler- Compiler) wygenerowany parser potrzebuje analizatroa leksykalnego obecnie rzadko używany bison Open source (darmowy)
11 ...związek z kompilacją 11 faza wstępna faza końcowa faza postkońcowa Skaner Parser Analizator semantyki Optymizator Generator kodu Lex/Flex (*.l skrypt) Yacc/Bison (*.y skrypt)
12 Schemat działania 12 KOD ŹRODŁOWY a = b + c * d WZORCE GRAMATYKA = id1 + id2 * id3 id4 ^ lex/flex yylex() ANALIZA LEKSYKALNA yyparse() yacc/bison ANALIZA SYNTAKTYCZNA KOD ASEMB. ======== load id3 mul id4 add id2 store id1
13 Schemat działania 13 skrypt.l skrypt.y lex flex yacc bison kod skanera skrypt.lex.c skrypt.tab.c kod parsera wejście a.out wyjście
14 Jak działa flex? 14 Flex używa skryptu *.l do generowania skanera *.l skrypt lex lex.yy.c skaner: czyta plik wejściowy (input file) przetwarza plik na ciąg tokenów tokeny przekazuje do parsera
15 Jak działa flex? 15 Skrypt dla flex- a: %{ #include <stdio.h> %} %% begin printf("started\n"); hello printf("hello!\n"); thanks printf( Welcome\n"); end printf("stopped\n"); %% KOMPILACJA i WYKONANIE $ flex examplea.l! $ gcc -o examplea lex.yy.c lfl! $./examplea! begin! Started! hello! Hello!! end! Stopped! thanks! Welcome! hello thanks! Hello!! Welcome!
16 Tokenizacja 16 %{ #include <stdio.h> #include <y.tab.h> %} %% begin return BEGIN; hello return HELLO; thanks return THANKS; end return END; %% Zamiast drukowania (printf(...)) dokonujemy identyfikacji TOKENU i zwracamy jego nazwę. Nazwa ta będzie używana przez program yacc, do opisu gramatyki.
17 Wyrażenia regularne 17 /* sekcja definicji */ %{ #include <stdio.h> %} %% /* sekcja reguł */ [a-z] printf("lowercase_word\n"); [A-Z] printf("uppercase_word\n"); [a-za-z] printf("word\n"); [0-9] printf("integer\n"); [0-9.] printf("float\n"); ";" printf("semicolon\n"); "(" printf( Left_parentheses\n"); ")" printf( Right_parentheses\n"); %%
18 Format reguł flex- a 18 dopasuj tekst z wejścia do wzorców (REGEX) zwracaj typ tokenów (TOKEN_TYPE) Format:! REGEX!{ /* Kod */!!!return TOKEN_TYPE;!!}!!!
19 Reguły flex- a 19 Flex dopasowuje tokeny o największej długości Wejście: abc Reguła: [a- z]+ Token: abc(nie "a" i nie "ab ) Flex używa zasady: pierwsza dobra reguła wejście: jeden Reguła_1: "jeden { printf("hello,"); Reguła_2: [a- za- z]+ { printf ("World!"); } à Wyjście: Hello, (nie World! )
20 Wymiana danych 20 yytext - przechowuje wartość przeczytaną przez lex yyval - jest używana do wymiany wartości między lex a yacc Przykład [0-9] yyval = atoi(yytext); return NUMBER; Tutaj pod yyval została wstawiona wartość otrzymana z konwersji napisu wejściowego, dopasowanego do wyrażenia regularnego, która pierwotnie została zapisana w zmiennej yytext. Prócz tego zwrócony został typ wartości (NUMBER) w ten sposób yacc dowie o typie i może go używać we własnych definicjach.
21 Wymiana danych 21 definicje tokenów metoda podstawowa inne informacje YYSTYPE (lex i yacc: definicje) %{ #define YYSTYPE double %} lex: deklaracje extern YYSTYPE yyval; yacc: deklaracje YYSTYPE yyval;
22 Ogólny skrypt lex- a 22 plik skryptu dla lex- a: /** sekcja definicji **/!...! %%! /** sekcja reguł **/!...! %%! /** Sekcja kodu C kopiowanego dosłownie **/!...
23 calc1.l 23! /* sekcja definicji */! %{! #include <stdlib.h>! #include <stdio.h>! #include "calc1.h"! void yyerror(char*);! extern int yylval;! %}!
24 calc1.l 24! /* sekcja definicji */! %{! #include <stdlib.h>! #include <stdio.h>! #include "calc1.h"! void yyerror(char*);! extern int yylval;! %}! nagłówek calc1.h
25 calc1.l 25! /* sekcja definicji */! %{! #include <stdlib.h>! #include <stdio.h>! #include "calc1.h"! void yyerror(char*);! extern int yylval;! %}! nagłówek funkcji błędów
26 calc1.l 26! /* sekcja definicji */! %{! #include <stdlib.h>! #include <stdio.h>! #include "calc1.h"! void yyerror(char*);! extern int yylval;! %}! zmienna komunikacyjna, zewnętrzna
27 calc1.l 27 /* sekcja reguł */! %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
28 calc1.l 28 /* sekcja reguł */! wyrażenia regularne, wzorce %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
29 calc1.l 29 /* sekcja reguł */! puste znaki %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
30 calc1.l 30 /* sekcja reguł */! cyfry; jedna lub więcej %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
31 calc1.l 31 /* sekcja reguł */! zwracana nazwa tokenu %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
32 calc1.l 32 /* sekcja reguł */! jeden znak; operator %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
33 calc1.l 33 /* sekcja reguł */! kropka oznacza dowolny znak (nie \n) %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
34 calc1.l 34 /* sekcja reguł */! reakcja na kropkę %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
35 calc1.l 35 /* sekcja reguł */! przekazywana zmienna i jej zawartość %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
36 calc1.l 36 /* sekcja reguł */! przekazywany typ tokenu %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
37 calc1.l 37 /* sekcja reguł */! funkcja błędów %%! [ \t]+ ;! [0-9]+ {yylval = atoi(yytext); return INTEGER;}! [-+*/] {return *yytext;}! "(" {return *yytext;}! ")" {return *yytext;}! \n {return *yytext;}!. {char msg[25]; sprintf(msg,"%s <%s>",! "invalid character",yytext); yyerror(msg);}!!
38 38 yacc/bison
39 Jak działa bison? 39 Bison używa skryptu z pliku *.y nazwa.tab.c nazwa.y bison nazwa.parse.c Parser czyta ciąg tokenów i próbuje zidentyfikować struktury gramatyczne zgodnie ze specyfikacją
40 Gramatyka 40 Gramatyka zbiór reguł formalnych dla napisów z danego języka. Reguły opisują zasady tworzenia napisów (tokenów) ze znaków zgodnie z zadaną składnią
41 41 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
42 42 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
43 43 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA Startujemy z lewej strony.widzimy, że mamy id. WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
44 44 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA id jest wyrażeniem WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
45 45 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA Parser wie, że 3 jest wyrażeniem. W dalszych próbach oprze się na następnym znaczniku. WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
46 46 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA Produkcja z plus pasuje bo jest to następny token z wejścia. WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
47 47 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA Przesuwamy się do następnego tokenu, który jest id, a więc jest wyrażeniem (E) WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
48 48 Prosty przykład Leksem Token 3 LICZBA + O_PLUS 2 LICZBA - O_MINUS 1 LICZBA Wiemy, że E + E to wyrażenie (E). Powtarzamy proces aż do wyczerpania możliwości... WEJŚCIE: E => E + E E E E * E E / E id Gramatyka
49 Gramatyka i format yacc 49 Gramatyka G = {{E, I}, T, P, E} 1. E => I! 2. E => E + E! 3. E => E * E! 4. E => ( E )! 5. I => a! 6. I => b! 7. I => Ia! 8. I = Ib! 9. I = I0! 10. I => I1!! T = {+, *, (, ), a, b, 0, 1} = s. terminalne P = {produkcje: 1-10}, E start Format programu yacc! Exp : Id {...}! Exp + Exp {...}! Exp * Exp {...}! ( Exp ) {...}! ;! Id : a {...}! b {...}! Id a {...}! Id 0 {...}! Id 1 {...}! ;!
50 calc1.y 50!! /* sekcja definicji */! %{! #include <stdlib.h>! #include <stdio.h>! int yylex(void);! #include "calc1.h"! %}! %token INTEGER!
51 calc1.y 51 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }!
52 calc1.y 52 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }! reguły gramatyczne
53 calc1.y 53 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! akcje expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }!
54 calc1.y 54 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }! Kolejność operacji zapewnia kolejność produkcji: najpierw plus/minus co oznacza, że mulex jest realizowane jako pierwsze. Można deklarować łączność działań: %left PLUS MINUS! %right NOT!! etc.
55 calc1.y 55 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }! zwykły wydruk; informacja
56 calc1.y 56 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! $1 $2 $3 expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }! specjalne zmienne przechowujące dopasowane wyrażenia z prawej strony produkcji
57 calc1.y 57 %% /* sekcja REGUŁ */! program:! line program! line:! expr:! mulex:! term:! line! expr \n { printf("%d\n",$1); }! n! expr + mulex { $$ = $1 + $3; }! expr - mulex { $$ = $1 - $3; }! mulex { $$ = $1; }! mulex * term { $$ = $1 * $3; }! mulex / term { $$ = $1 / $3; }! term { $$ = $1; }! ( expr ) { $$ = $2; }! INTEGER { $$ = $1; }! obliczona lewa strona produkcji i umieszczana na stosie
58 calc1.y 58 /* sekcja kodu C */! %%! void yyerror(char *s)! {! fprintf(stderr,"%s\n",s);! return;! }! int main(void)! {! /*yydebug=1;*/! yyparse();! return 0;! }! wywołanie głównej funkcji parsera
59 calc1.y 59 /* sekcja kodu C */! %%! void yyerror(char *s)! {! fprintf(stderr,"%s\n",s);! return;! }! int main(void)! {! /*yydebug=1;*/! yyparse();! return 0;! }! definicja funkcji błędów
60 Praktyka 60 uruchomić yacc/bison na pliku skryptowym z definicjami uruchomić lex/flex na pliku definicji syntaktycznych skompilować żródło wygenerowane przez yacc skompilować plik wygenerowany przez lex/flex skompilować inne potrzebne pliki połączyć wszystkie wynikowe pliki w plik wykonywalny
61 Przykład: poprawianie tekstu 61 lex/flex: Usuwanie zbędnych pustych linii, wielokrotnych spacji, spacji przed znakami przestankowymi takimi jak.,?! itd. /** definicje **/ punct [,.;:!?] text [a- za- Z] %% /** reguły **/ ) +/{punct} {printf( ) );} ) /{text} {printf( ) );} {text}+ +/ ) {while (yytext[yyleng- 1]== ) yyleng- - ; ECHO;} ({punct} {text}+)/ ( {ECHO; printf( );} ( +/{text} {while (yytext[yyleng- 1]== ) yyleng- - ; ECHO;} {text}+" "+/{punct} {while (yytext[yyleng- 1]== ) yyleng- - ; ECHO;} ˆ + ; + {printf( );}. {ECHO;} \n/\n\n ; \n {ECHO;}
62 Kalkulator (flex)[3] 62 %{! #include <stdlib.h>! #include "calc.tab.h"! %}! NUMBER [0-9]+! OP![+-/*]! %%! {NUMBER}!{ yylval.value =!!strtol(yytext, 0, 10); return NUMBER; }! ({OP} \n)!{ return yytext[0]; }!.!!{ ; }!
63 Praktyka - makefile 63 YFLAGS!= -d # header files! PROGRAM = calc! OBJS!= $(PROGRAM).tab.o lex.yy.o # + inne! SRCS CC!= $(PROGRAM).tab.c lex.yy.c # + inne!!= gcc! all: $(PROGRAM)!.c.o: $(SRCS)!!$(CC) -c $*.c -o $@ -O! $(PROGRAM).tab.c: $(PROGRAM).y!!bison $(YFLAGS) $(PROGRAM).y! lex.yy.c: $(PROGRAM).l!!flex $(PROGRAM).l! calc: $(OBJS)!!$(CC) $(OBJS) -o $@ -ll -lm! clean:;!rm -f $(OBJS) core *~ \#* *.o $(PROGRAM) \!!y.* lex.yy.* $(PROGRAM).tab.*!
64 Literatura Lesk, Schmidt. Lex A Lexical Analyzer Generator. 2. Johnson. Yacc Yet another compiler- compiler. 3. T. Niemann. LEX & YACC TUTORIAL (epaperpress.com) 4. M. Landwehr. Flex/bison tutorial. ( hgp:// 5. www/developerworks/aix/tutorials/au_lexyacc 6. Flex/Bison Tutorial. Aaron Myles Landwehr <aron+ta@udel.edu>
65 Pytania i dyskusja 65?
66 66 Dodatki na wszelki wypadek...
67 Kalkulator 67 Zadanie 1. Używając programów lex/flex oraz yacc/bison napisać program prostego kalkulatora z odwróconą notacją polską, z działaniami +,-,*,/. Zadanie 2. Niech T={0, 1, (, ), +, *,!, e} oznacza zbiór symboli terminalnych. Zaprojektować CFG (context free grammar), która generuje wyrażenia regularne nad alfabetem {0,1}. (Patrz: HopcroR, Rozdział 5. G={V, T, P, S}, gdzie V jest zbiorem zmiennych, T oznacza symbole terminalne, P jest zbiorem produkcji, S jest symbolem startowym). Zadanie 3. Rozważyć CFG zdefiniowaną produkcjami: S => asbs bsas ε. Udowodnić, że język L(G) jest zbiorem wszystkich napisów o równej liczbie symboli a i b.
68 calc.l [4] 68 %{ #define YYSTYPE double #include "calc.tab.h" #include <math.h> extern double yylval; %} D [0-9.] %% [ \t] { ; } log return LOG; pi return PIVAL; sin return SIN; cos tan and return COS; return TAN; return AND; not xor or reg ans fix sci eng const return NOT; return XOR; return OR; return REGA; return ANS; return FIX; return SCI; return ENG; return CONST; bintodec return BINTODEC; dectobin return DECTOBIN; {D}+ { sscanf( yytext, "%lf", &yylval ); return NUMBER ; } [a- za- Z_]+ return IDENT; "[" return OPENREG; "]" return CLOSEREG;
69 calc.l [4] cd. 69 "<<"!return LEFTSHIFT;! ">>"!return RIGHTSHIFT;! "++"!return INC;! "--"!return DEC;! "+"!return PLUS;! "-"!return MINUS;! "~"!return UNARYMINUS;! "/"!return DIV;! "*"!return MUL;! "^"!return POW;! "!!return FACT;! ("!return OPENBRACKET;! ")"!return CLOSEBRACKET;! "%"!return MOD;!!! "^^"!return XOR;! "("!return OPENBRACKET;! ")"!return CLOSEBRACKET;! "%"!return MOD;! "^^"!return XOR;! "!!"!return NOT;! "="!return ASSIGN;! "&&"!return LAND;! " "!return OR;! " "!return IOR;! "&"!return AND;! "~~"!return COMPLEMENT;! "\n"!return EOLN;!!
70 Metaznaki wzorców 70 Metaznak Dopasowanie. dowolny znak oprócz nowej \n newline * zero lub więcej kopii poprzedniego wyrażenia + jedna lub więcej kopii poprzedniego wyrażenia? zero lub jedna kopia poprzedniego wyrażenia ^ początek linii $ koniec linii a b a lub b (ab)+ jedna lub więcej kopii ab (grupowanie) "a+b" literał "a+b [] klasa znaków
71 Przykłady regexp i dopasowań 71 Wzorzec Dopasowanie abc abc abc* ab abc abcc abccc... abc+ abc abcc... a(bc)+ abc abcbc abcbcbc... a(bc)? a abc abcbc... [a- z] dowolna litera a, b,...,z [- az] - lub a lub z [a- za- Z0-9]+ jeden lub więcej znaków alfanumerycznych [ \t\n]+ biały znak (odstęp, tabulator, nowa linia) [^ab] wszystko oprócz a, b [a^b] a lub ^ lub b [a b] a lub lub b a b a lub b
72 Redukcja produkcji 72 gramatyka operacje na stosie E => E * E (r2) => E * z (r3) => E + E * z (r1) => E + y * z (r3) => x + y * z (r3) 1. x + y * z shig 2 x. + y * z reduce(r3) 3 E. + y * z shig 4 E +. y * z shig 5 E + y. * z reduce(r3) 6 E + E. * z shig 7 E + E *. z shig 8 E + E * z. reduce(r3) 9 E + E * E. reduce(r2) emit mulhply 10 E + E. reduce(r1) emit add 11 E. accept
73 73 za tydzień...!?
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
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)
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
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:
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
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
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
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)
Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.
Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami. wer. 8 z drobnymi modyfikacjami Wojciech Myszka 2014-02-09 16:32:37 +0100 Co jest potrzebne programiście? 1. Umiejętność
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
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
Flex - generator analizatorów leksykalnych
Flex - generator analizatorów leksykalnych Spis treści: 1. Wprowadzenie Wyrażenia regularne Schemat specyfikacji Prosty przykład Uruchomienie Makefile 2. Rozstrzyganie niejednoznaczności 3. Rozpoznawanie
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
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
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
Ć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
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
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ć:
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ł
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ę.
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,
Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ Narzędzia, zastosowanie oraz próby rankingu.
Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ Narzędzia, zastosowanie oraz próby rankingu. Flex Flex wywodzi się jak cała rodzina tego typu narzędzi od jednego przodka:
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,
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
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
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
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
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
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
Generator YACC: gramatyki niejednoznaczne
Plan wykładu Generator YACC: gramatyki niejednoznaczne Wojciech Complak Wojciech.Complak@cs.put.poznan.pl gramatyki jednoznaczne i niejednoznaczne zalety gramatyk niejednoznacznych opisywanie łączności
Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.
Generator analizatorów leksykalnych - Lex 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 leksykalnych LEX. Zapraszam
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
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Przemysław Kobylański Wprowadzenie Każdy program w C musi zawierać przynajmniej funkcję o nazwie main(): Aby możliwe
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
automatem skończonym niedeterministycznym (ang. nondeterministic finite automaton) M N nazywamy system:
4.3. Automaty skończone (skończenie stanowe) automatem skończonym niedeterministycznym (ang. nondeterministic finite automaton) M N nazywamy system: M N = < Q, Σ, δ, q 0, F > Q Σ skończony zbiór stanów
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
Wstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
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
Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy Laboratorium 1 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Na podstawie: G. Perry, D. Miller, Język C Programowanie dla
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ć,
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
1. Wprowadzanie danych z klawiatury funkcja scanf
1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),
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
1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
Programowanie Proceduralne
Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14 Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest
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
Podstawy Kompilatorów
Podstawy Kompilatorów Laboratorium 6 Generator LLgen. Zadanie 1: Proszę napisać akceptor dla języka a n b m (n, m > 0). Przykłady: aaabb powinniśmy otrzymać wynik: OK aaabba powinniśmy otrzymać komunikat
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
Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,
Metody kompilacji Wykłady 4-5
Metody kompilacji Wykłady 4-5 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,
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
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,
Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.
Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym
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
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
Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w Javie
Zwięzły opis narzędzi wraz konkretnymi przykładami, próba porównania i rankingu Do stworzenia parsera nie jest konieczne używanie zewnętrznych narzędzi można posłużyć się algorytmem tworzenia funkcji rekurencyjnych
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ń,
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
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ę
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
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,
System operacyjny Linux
Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 7 Język awk Wprowadzenie Schemat programu Konstrukcja wzorców Konstrukcja wyrażeń regularnych Struktury kontrolne Predefiniowane
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]
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
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
Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.
Spis treści 1 Krótkie wprowadzenie do makefile'a 1.1 Typowa reguła programu make 1.2 Zmienne w pliku Makefile 1.3 Zmienne standardowe 1.4 Zmienne automatyczne 1.5 Więcej o regułach 1.5.1 Reguły z wzorcem
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
Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!
Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja! Krzysztof Grudzień kgrudzi@kis.p.lodz.pl! Zbigniew Chaniecki zch@kis.p.lodz.pl 1 program zajęć - wykład Podstawowe pojęcia
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą
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
1. Wprowadzenie do C/C++
Podstawy Programowania - Roman Grundkiewicz - 013Z Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
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
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Programowanie w języku C++ Grażyna Koba
Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad
Funkcja (podprogram) void
Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument 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,... ) ;
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,
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()
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
Świat parserów. Krzysztof Leszczyński Polska Grupa Użytkowników Linuxa chris@camk.edu.pl
Świat parserów Krzysztof Leszczyński Polska Grupa Użytkowników Linuxa chris@camk.edu.pl Streszczenie Pisząc oprogramowanie, stykamy się bardzo często z potrzebą analizy języków programowania. Niniejsza
Wyrażenia regularne. Wyrażenia regularne 1/41
Wyrażenia regularne Wyrażenia regularne 1/41 Wyrażenia regularne 2/41 Po co wyrażenia regularne? Polecenie: $ grep est tekst.txt Zawartość tekst.txt To jest plik tekstowy. Testujemy narzędzie grep. Trzecia
Języki formalne i techniki translacji
Języki formalne i techniki translacji Laboratorium - Projekt Termin oddania: ostatnie zajęcia przed 17 stycznia 2016 Wysłanie do wykładowcy: przed 23:59 28 stycznia 2016 Używając BISON-a i FLEX-a napisz
Tablice, funkcje - wprowadzenie
Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład
Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35
Programowanie w C++ Wykład 3 Katarzyna Grzelak 12 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35 Zakres ważności obiektów K.Grzelak (Wykład 1) Programowanie w C++ 2 / 35 Zakres ważności obiektów
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
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
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
Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++
Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
1. Wprowadzenie do C/C++
Podstawy Programowania :: Roman Grundkiewicz :: 014 Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe
Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)
Co nie powinno być umieszczane w plikach nagłówkowych:
Zawartość plików nagłówkowych (*.h) : #include #define ESC 27 dyrektywy dołączenia definicje stałych #define MAX(x,y) ((x)>(y)?(x):(y)) definicje makr int menu(char* tab[], int ilosc); struct
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,
/* 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
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
Metodyki i Techniki Programowania 1 1 1. MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA
Metodyki i Techniki Programowania 1 1 ZAJ CIA 3. 1. MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA IDE zintegrowane środowisko programistyczne, zawierające kompilator, edytor tekstu i linker,
Języki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
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ą
wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,
, Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer