Download presentation
Presentation is loading. Please wait.
1
Oрганизација програма
Претпроцесор Лексичка анализа Декларације и дефиниције Организација програма и повезивање
2
Претпроцесор Пре превођења, изворни програм се обрађује помоћу претпроцесора уграђеног у језик. Претпроцесор има могућности дефинисања макроа, условног превођења, укључивања датотека и др. Претпроцесором се управља директивама.
3
Претпроцесор Директива почиње знаком # и завршава се на крају реда.
Ако је потребно да се настави у следећем реду, на крај претходног реда ставља се знак \. Директива важи од места навођења до краја програмске датотеке.
4
Претпроцесор #define makro ova direktiva se nastavlja \ i u sledecem redu.\ a kraj je u ovom redu. Чему ово служи?
5
#define identifikator niz_reci
Претпроцесор #define identifikator niz_reci Свака појава имена identifikator замењује се стрингом niz_reci. #define pi #define MAX 100 #define zbir(a,b) ((a)+(b))
6
Претпроцесор #undefine identifikator
Овим се укуда претходно дефинисан макро
7
#include <imedatoteke>
Претпроцесор Директивом #include <imedatoteke> налаже се претпроцесору да на место директиве укључи цео садржај наведеног фајла, који се налази на унапред договореном месту (подразумевани директоријум преводиоца).
8
#include “imedatoteke”
Претпроцесор Директивом #include “imedatoteke” налаже се претпроцесору да на место директиве укључи цео садржај наведеног фајла, који се налази на унапред договореном месту (текући директоријум).
9
Претпроцесор Условно превођење #if konstantni_izraz if_deo
#elif konstantni_izraz elif_deo #else else_deo #endif
10
Претпроцесор Често се користи уз оператор defined.
#if defined identifikator #ifdef identifikator #ifndef identifikator
11
Лексичка анализа Преводилац најпре раставља изворни код на токене.
Токени су елементарне лексичке јединице: идентификатори, кључне речи, литерали, оператори и сепаратори.
12
Лексичка анализа Токени се раздвајају белинама:
бланко знак, нови ред, табулатор, ... И претпроцесор и преводилац не врше анализу на нивоу знакова већ на нивоу токена.
13
Лексичка анализа Лексичком анализом се издваја најдужи низ знакова који преставља токен.
14
Лексичка анализа if (a<b) if (c<d) for (i=0; i<100 ; i++) niz[i] =niz[i+1]; if (a<b) if (c<d) for (i=0; i<100; i++)
15
Лексичка анализа Коментари такође представљају белине.
a=b+++c; a = b++ + c; Коментари такође представљају белине. Коментар почиње знаком /* и завршава се знаком */ или почиње знаком // и завршава се на крају реда.
16
Лексичка анализа Идентификатор је произвољан низ слова или цифара који почиње словом. Знак _ сматра се словом! Два стила писања: MojeIme moje_ime
17
Лексичка анализа Кључне речи су резервисане – не могу се употребљавати са другим значењем осим оним прописаним језиком. asm continue float new signed try auto default for operator sizeof typedef break delete friend private static union case do goto protected struct unsigned catch double if public switch virtual char else inline register template void class enum int return this volatile const extern long short throw while
18
Лексичка анализа Следећи знаци представљају операторе или знаке интерпункције и чине токене: ! % ^ & * ( ) - + = { } | ~ [ ] \ ; ‘ : “ < > ? , . /
19
Лексичка анализа Следеће комбинације знакова представљају операторе и такође чине токене: -> * ->* << >> <= >= == != && || *= /= %= += -= <<= >>= &= ^= |= ::
20
Лексичка анализа Литерали (костанте) могу бити: целобројне константе;
знаковне константе; рационалне константе; стрингови.
21
Лексичка анализа Целобројне константе могу бити:
децимални бројеви; октални бројеви (прва цифра 0); хексадецимални бројеви (почињу са 0x); Тип константе је неки од целобројних типова који може да прими ту вредност. Користе се суфикси U за unsigned и L за long.
22
Лексичка анализа Знаковна константа је знак уоквирен једноструким наводима (‘) и типа је char. Вредност јој је одговарајући код знака. Знаковне константе са више знакова типа су int. Њихова вредност зависи од имплементације преводиоца и у принципу их треба избегавати.
23
Лексичка анализа Неки посебни знаци који не могу да се преставе, једноструки и двоструки наводници, знак питања и обрнута коса црта представљају се на посебан начин.
24
Лексичка анализа Опис знака Знак Представа Пример Нови ред (new line)
NL (LF) \n ‘\n’ Хоризонтални табулатор HT \t ‘\t’ Вертикални табулатор VT \v ‘\v’ Backspace BS \b ‘\b’ Carriage return CR \r ‘\r’ Нова страна FF \f ‘\f’ Звоно BEL \a ‘\a’ Обрнута коса црта (backslash) \ \\ ‘\\’ Знак питања ? \? ‘\?’ Једноструки навод ‘ \’ ‘\’’ Двоструки навод “ \” ‘\”’ Октални број \ooo ‘\142’ Хексадецимални број \xhhh ‘\x3F’
25
Лексичка анализа Рационалне константе су децимални бројеви са опционим експонентом (е или Е). Подразумевани тип им је double а суфикс за float је F а за long double је L.
26
Лексичка анализа Стринг је низ знакова уоквирен двоструким наводима.
Тумачи се као низ елемената типа char. Преводилац додаје на крај низа знак ‘\0’ који улази у дужину низа.
27
Декларације и дефиниције
Декларација је исказ којим се у програм уводи име. Дефиниција је она декларација која укључује креирање објекта у време извршавања, даје тело функције или у потпуности дефинише тип (класу).
28
Декларације и дефиниције
У програму мора да постоји само једна дефиниција сваког објекта, функције, класе и константе типа набрајања. Декларације које нису дефиниције могу се произвољно много пута понављати.
29
Декларације и дефиниције
class S; // deklaracija koja govori da je S ime klase class S; // moze se ponavljati int a; // definicija int a; // greska, definicija ne sme da se ponovi
30
Организација програма и повезивање
Програм у језику C++ се обично састоји од више програмских модула. Ови модули се преводе одвојено а затим повезују. Да би се обезбедило правилно повезивање потребно је да декларације имена буде на свим потребним местима.
31
Организација програма и повезивање
То се постиже коришћењем фајлова заглавља. Ови фајлови имају екстензију .h и укључују се помоћу директиве #include.
32
Организација програма и повезивање
// Fajl: osoba.h // Sadrzi deklaraciju klase osoba class osoba { protected: char ime[30]; int god; public: virtual void ko_si(); osoba (char ime_i_prezime[30], int godine_starosti); };
33
Организација програма и повезивање
// Fajl: osoba.cpp // Sadrzi definicije funkcija clanica klase osoba # include “osoba.h” void osoba::ko_si() { ispisi ime i godine u recenici “Ja sam … i imam … godina” } osoba::osoba (char i[30], int g) { inicijalizuj ime i godine
34
Организација програма и повезивање
// Fajl: osoba.h // Sadrzi deklaraciju klase osoba #ifndef _osoba #define _osoba class osoba { protected: char ime[30]; int god; public: virtual void ko_si(); osoba (char ime_i_prezime[30], int godine_starosti); }; #endif
35
Организација програма и повезивање
Уз преводиоце се испоручују и библиотеке фунција и класа. Потребне декларације се уводе помоћу директиве #include <ime_fajla>
36
Организација програма и повезивање
Стандардно заглавље Опис <float.h> Садржи параметре за функције за рад са рационалним бројевима у покретном зарезу <limits.h> Садржи параметре окружења, информације о ограничењима преводиоца, као и опсеге целобројних величина <stddef.h> Садржи неколико често коришћених типова података и макроа <stdarg.h> Садржи макрое за читање аргумената функција које могу да приме променљив скуп аргумената <stdlib.h> Садржи декларације разних често коришћених функција за конверзије, сортирање и слично <stdio.h> Садржи типое и макрое за стандардни пакет УИ функција. <iostream.h> Садржи декларације стандардних УИ функција и класа <string.h> Садржи декларације функција за рад са стринговима <math.h> Садржи декларације математичких функција
37
Организација програма и повезивање
Главни програм се налази у функцији main: void main (); void main (int argc, char *argv[]); int main (); int main (int argc, char *argv[]); argc – број речи у позиву, укључујући име програма argv – низ показивача на речи из позива
38
Организација програма и повезивање
Програм се може завршити повратком из функције main; позивом функције exit; позивом функције abort;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.