програмски јазик ц

21
Вовед Програмските јазици му овозмнозуваат на човекот да му соопшти на компијутерот што треба да работи •Постојат следниве видови на програмски јазици: Машински јазици Програмски јазици Асемблерски јазици Процедурални јазици Непроцедурални јазици Природни програмски јазици-интелигентни јазици Исто така постојат и прогамски јазици –современи концепти Визуелни програмски јазици Hypertext Markup Language (HTML) Extensible Markup Language(HML) Oбјектно-ориентирани програмски јазици (ООР) COMPONENTWARE Трета генерација програмски јазици •Процендурални јазици (трета генеација програмски јазици) •Поблиски се до природните јазици(јазици од високо ниво)-користат препознатливи зборови наместо кратки мнемонички кодови •Бараат од прогамерот прецизно да специфираат,чекор по чекор,како компијутерот треба да ја изврши поставената задача •Секоја инструкција се преведува во неколку (повеќе)машински инструкции 1

Upload: -

Post on 04-Aug-2015

466 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: програмски јазик ц

Вовед•Програмските јазици му овозмнозуваат на човекот да му соопшти на компијутерот што треба да работи•Постојат следниве видови на програмски јазици:

Машински јазици

Програмски јазици

Асемблерски јазици

Процедурални јазици

Непроцедурални јазици

Природни програмски јазици-интелигентни јазици

Исто така постојат и прогамски јазици –современи концепти

Визуелни програмски јазици

Hypertext Markup Language (HTML)

Extensible Markup Language(HML)

Oбјектно-ориентирани програмски јазици (ООР)

COMPONENTWARE

Трета генерација програмски јазици

•Процендурални јазици

(трета генеација програмски јазици)

•Поблиски се до природните јазици(јазици од високо ниво)-користат

препознатливи зборови наместо кратки мнемонички кодови

•Бараат од прогамерот прецизно да специфираат,чекор по чекор,како

компијутерот треба да ја изврши поставената задача

•Секоја инструкција се преведува во неколку (повеќе)машински

инструкции

•Примери:Cbol,C,Fortran,Basic,Pascal,...

•Compiler(компајлер)-преведувач кој преведува цела програма одеонаш

•Interpreter(интерпретер)-преведувач кој ги преведува и извршува

наредбите од изворната.

.

1

Page 2: програмски јазик ц

Содржина

Програмски јазик Ц(c) e релативно нов програмски јазик.Тоа е програмски јазик кој ги одбележа осумдесетите и деведесетите години на минатиот век.Ц е најраширен програмски јазик на светот.Тој е едноставен програмски јазик кој ја пополнува празнината меѓу вишите програмски јазици и асемблерите (assembler) бидејќи ги комбинира особеностите на вишите програмски јазици со функционалноста на асемблерите.Поради тоа Ц можеме да го наречеме јазик што ги обединува својствата и на вишите програмски јазици и на асемблерите.

За творец на овој програмски јазик се смета Денис Ричи (Dennis Ritchie) од Bell-овите лабаратории на AT&T.Тој заедно со Кен Нортон (Ken Northon) работел на дизајнирање на првичните верзии на оперативниот систем ЈУНИКС(UNIX) и го имплементира на PDP 11.Во 1978 година Брајан Кернихан (Brian Kеrnighan) и Денис Ричи ја издале првата книга со програмски јазици Ц.Оваа книга служела како реферетна книга за јазикот се до појавата на првиот ANSI стандарт за Ц, десетина години подоцна.

Генелогијата на програмскиот јазик Ц е следнава : како и за сите други структуирани програмски јазици така и за програмскиот јазик Ц може да се каже дека негов најдалечен предок е програмскиот јазик ALGOL 60.ALGOL –от60 ,како што кажува неговото име, бил развиен во 1960 година од страна на повече национални групи.Тој настанал само неколку години по програмскиот јазик FORTRAN.При создавањето на овој јазик било посветено големо внимание на неговата синтакса, модуларната структура и многу други нешта за кој денес се смета дека се современи и полезни.За жал,овој програмски јазик не бил никогаш општо прифатен од програмерите, веројатно поради неговата преголема генералност,апстрактност и опширност.

Во 1963 година на универзитетот во Кемриџ развиен е програмски јазик CPL(Combined Programming Language). Овај јазик претставува обид програмскиот јазик ALGOL 60 да се поедностави и доведе до разумна мера.Но иовој програмски јазик бил преопширен и пресложен, па како таков тежок за учење и примена.Мартин Ричардс(Martin Richards) исто така од Кембриџ, во 1967 година го создал јазикот BCPL(Basic Combined Programming Language).При тоа,поедноставно програмскиот јазик CPL, се

.

2

Page 3: програмски јазик ц

обидел да дојде до поедноставен и применлив програмски јазик.Овој програмски јазик е сличен на макроасемблерите и се нашол во примена на повеќе компјутери меѓу кои и на некои микрокомпјутери (BBC и Sincler QL).

Натамошното поедноставување на овој програмски јазик било направено Кен Томсон (Ken Thompson).Тој работел во лабараториите на Bell на имплементација на разните верзии на оперативниот систем ЈУНИКС.За таа цел, Томсон го создал програмскиот јазик Б во 1970 година.Јазикот Б преставува натамошно поедноставување на програмскиот јазик BCPL.Тој бил применет за реализација на првиот ЈУНИКС оперативен систем на компјутерот PDP-7.Поедноставувањето на овие програмски јазици довело до тоа тие да личат на макроасемблери и да бидат употребливи само за ограничен број примени. Денис Ричи се обидел да ја поврати изгубената генералност кај овие програмски јазици,конструирајќи го програмскиот јазик Ц во 1972година.Според тоа генеологијата на програмскиот јазик Ц е следнава :ALGOL 60 ›CPL›BCPL›B›C.

Програмскиот јазик Ц бил конструиран за потребите на развој и пренос на оперативниот систем ЈУНИКС од еден вид компјутер на друг.Овој оперативен систем бил напишан во асемблер за PDP11,а Денис Ричи го преобратил неговото јадро со помош на програмскиот јазик Ц.На тој начин оперативниот систем станал полесно пренослив на други компјутери.

Програмскиот јазик Ц не бил посебно популаризиран од никого.Тој самиот се наметнал меѓу програмерите без никакво рекламирање,така што и самиот автор бил изненаден кога видел колку неговиот јазик станал популарен.

Од PDP 11Ц се проширил на мини компјутерите,а потоа и на микро компјутерите.Тоа е основно орудие на много познати програмерски куќи како што се:Ashton Tate,Microsoft,Digital Research,DEK,AT&T итн.

Преносливоста на Ц ,за која многу се зборува,е реалност,на ниво на пренос на програми што инаку би се пренесувале како асамблерски програми.За апликативни програми преносливоста на јазиците,како што се Паскал( Pascal ) и FOTRAN е поголема поради големиот степен на нивната стандардизација.

Јазикот Ц ја поседува компаксноста карактеристично за програмските јазици конструирани од еден човек.Такви програмски јаици се веќе спомнативе B и BCPL и програмските јазици како Паскал ,Lisp,APL и други.За разлика од нив програмските јазици што се конструирани од страна на тимови со повеќе автори како што се PL/1,ADA,ALGOL 60 и други,не се компактни и често пати се пресложени .Ц е програмски јазик за општа намена и со него можат да се пишуваат најразлични

3

Page 4: програмски јазик ц

програми.Сепак,може да се каже дека неговите можности најмногу доаѓаат до израз при пишување на систематски софтвер,што и била негова првенствена намена,а и специјалноста на неговиот творец.Во однос на големината,Ц е мал програмски јазик.Бројот на клучни зборови (Key Word) во Ц изнесува 32 (28 според првичниот не званичен стандард од книгата на Ричи и Кернихам и дополнителни 4 кои се внесени во ANSI стандардот за Ц).За разлика од Ц, IBM-овиот Basic, кој се смета за едноставен програмски јазик има 159 клучни зборови.

Клучни зборови во Ц според стандардот ANSI се : auto,break,case, char,const,continue,defaut,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signet,sizeof,static,struct,

switch,typedef,union,unsigned,void,volatile,while…Програмскиот јазик Ц е case sensitive односно тој прави разлика помеѓу малите иголемите букви.While не е што е и while.И во двете верзии може

да се забелеши дека Ц ги содржи само основните наредби и дека нема вградени влезно-излезни(I /O)наредби и наредби за ракување со низи знакови.Филозофијата на Ц е таква што сите посложени

наредби се реализираат со помош на основните наредби и како функции (function)се чуваат во така наречените библиотеки на функции (function library) со секој преведувач на Ц (C Compiler)се испорачуваат и повеќе библиотеки на разни видови функции.Програмите во Ц се состојат од низа блокови кои се организираат како функции според тоа пишувањето на програмите се сведува на пишување поедини функции и нивно вклопување.При тоа, сите функциии се рамноправни со тоа што една мора да го има името main .Тоа е функцијата со која почнува програмата.Читањето на програмите во Ц е тешко и на прв поглед тие се прилично не разбирливи за почетниците. Тоа е поради големиот број на оператори кои се присутни како резултат на тенденцијата за блискост со асемблерот.Покрај другото,моќта на Ц е и во овозможување на работа со покажувачи (Pointers). Многу машински инструкции работат со реални мемориски адреси,па примената на покажубвашите овозможува ефикасно преведени програми.

HELLO WORLD ВО CHello World e многу прост пример за програма и најчесто е наведено како прва почетничка програма во прирачниците за програмски јазици.Се состои само од најважните елементи без кои што не може да се изврше програмата и печати низа од знаци:Hello,World! (целта може да се постигне и со “здраво!”,наместо англиското Hello World).

4

Page 5: програмски јазик ц

JAVA (programski jazici)

Java е објективен програмски јазик кој што се појавува во средината на 1990-тите, а е развиен од Американската фирма Sun Microsystems. Тој програмски јазик е се позастапен во софтверските решенија на пазарот. Негова силна страна е што може да се користи на повеќе оперативни системи само со инсталирање на JRE(java runtime environment) за извршување напрограми напишани во Јава или на JDK(java development kit) за развивање на програмите во овој програмски јазик. Програмите напишани во Јава се составени објекти, произведени од класи кои што поседуваат својства и методи. Од напишаните класи во дадената програма се создаваат објекти со кои што преку дадените методи овие објекти се манипулираат.

Слични програмски јазици

Како најсличен јазик за време на напојувањето на Javaбил С++.По големото прифаќање на Java се појавил C # кој може да каже дека е најсличен на Java. Денес Java се користи за изработка на сите видови на апликации, било тоа да е апликација за мобилни телефони, мини компјутери, десктоп апликации, веб апликации или сложени и дистрибуирани мрежни апликациски системи.

Java Servlet теxнологија

Java Servlet технологијата денес е напредна технологија која се користи за креирање на веб апликации. Независноста од платформа, оперативен систем и апликациски сервер, оваа технологија овозможува моќна алатка за креирање на Web апликации со високи перформанси во однос на брзина, сигурност, точност и комбинација со други технологии. Денес, сервлетите се популарен избор за креирање на веб апликации насекаде во светот. Постојат многу производители на сервери, како:Apache Web server, Planet TM Web server, Microsoft IIS, JBoss, BEA Web Logic, IBM Web Sphere, Netscape Application server, и други кои му овозможуваат на корисниците да ја одберат најдобрата можна операција во поглед на сервери, платформи и алатки.

Сервлетите се пишуваат во јазикот Java, што им овозможува да го користат целиот потенцијал на овој јазик, вклучувајќија и JDBS технологијата, која овозможува пристап до сите бази на податоци.

JSP страница

JSP страница е всушност страница која е преведена во сервлет кога е повикана. Но, JSP страниците нудат повеќе можности од сервлетите, со тоа што овозможуваат поинаков пристап во

5

Page 6: програмски јазик ц

креирањето, промената и одржувањето на апликациите. Тоа е мешавина од HTML код со Java и JSP тагови, кои можат да се креираат или искористат некои од веќе понудените моќни TAG библиотеки.

JSP и Java Servlet технологиите ги нудат сите предности на Java програмскиот јазик, зрели, солидни решенија погодни за мали и големи корпоративни апликациски решенија.

Ова решение нуди:

Подвижност помеѓу платформи и сервери Масивно менаџирање на исклучоци, грешки и меморија Пристап до широк обем на APL технологии (JDBC,

JavaMail, XML.)

JSP и Java Servlet технологиите се дел од Java 2 Platform, Enterprise Edition (J2EE) платформата, и овозможуваат високо флексибилни и скалабилни решенија за креирање на повеќеслојни апликации во “enterprise” околина затоа што:

Имаат пристап до Enterprise JavaBeans и Ј2ЕЕ компоненти и сервери кои содржат широк опсег на апликациски функционалности, вклучувајќи безбедност и трансакции

Овозможуваат “ multithreaded processing ” и повеќе конкурентни барања, со што се идеални за апликации со голем број на истовремени корисници

Компајлер е компјутерски програм (или множество програми) кои го преведуваат текстот напишан во т.н. компјутерски јазик (изворен јазик) во друг компјутерски јазик-целниот јазик. Оригиналниот текст кој што му го даваме на компјутерот да го преведе се нарекува изворен код, додека излезниот код се нарекува објектен код. Обично излезот е во форма со која мажат да се процесираат други програми, но може да биде и форма читлива за човекот-текстуална датотека.

Најзначајна причина поради која би сакале да го преведеме изворниоткод е да креираме т.н. извршна програма. Името компајлер првично се користело за преведување на кодови од вишите програмски јазици во нижи програмски јазици, на пример од асемблерски јазик во машински јазик. Додека програмот кој што преведува од нижи програмски јазици во виши се нарекува декомпајлер.

Обично компајлерот ги изведува следниве активности: Лексичка анализа, Предпроцесирање, Парсирање, Семантичка анализа, Оптимизација на кодот, Генерирање на код.

6

Page 7: програмски јазик ц

Историја

Софтверот за првите компјутери се пишувал во асемблерски јазик многу години.Вишите програмски јазици не беа измислени се додека не се доби поволноста тие да се користат на различни видови CPU (Централна Процесирашка Единица). Многу огранишената меморија на раните компјатери исто така правела многу техношки програми за имплементацијата на компајлерот.

На крајот на 50тите госини,први беа предложени машински-независните јазици. Тогаш се направени неколкку експериментални компајлери. Првиот Компајлер е напишан од Грејс Хопер, за А-0 програмскиот јазик. FORTRAN тимот предводен од Џон Бакус (John Backus) во IBM е најголемиот виновник за претставувањето на првиот комплетен компајлер, 1957 год.

За многу апликации идејата за користење ваши програмски јазици беше прифатлиува. Огромната функционалност поддржана од новите програмски јазици и зголемената комплексност на компјутерските архитектури направи компајлерите да станат се посложени.

Раните компајлери беа пишувани во асембли јазик. Првиот само-одржувачки компајлер-способен да искомпајлира сопствен изворен код од виш програмски јазик-беше креиран од Lisp од Хард и Левин во MIT во 1962 год.Од 70 тите години вообичаена практика беше да се имплементира компајлер во јазикот кој го компајлира, иако и Paskal и С беа популарни избори за имплементација на јазикот.

Што извршува кодот?

Еден метод кој се користи за разликување на компајлерите е платформата на која се генерира кодот кој ја создава извршната програма.

Хостиран компајлер е оној компајлер чиј излез е наменет да работи на истиот тип на компјутер и оперативен систем на кој што работи самиот тој.Додека пак излезот на вкрстениот компајлер (cross compiler) е дизајниран да работи на различни платформи.Вкрстените компајлери често се употребуваат за градење на софтевер за вгнездени системи кој што не се наменети за поддржување на околина за развивање на софтвер.

Излезот на компајлерот кој што произведува код за Виртуелна Машина (ВМ) може но не мора да биде извршена на друга платформа.

7

Page 8: програмски јазик ц

Компајлер наспроти интерпретер

Многу луѓе прават поделба меѓу вишите програмски јазици на компајлирачки јазици и интерпретирачки јазици.Компајлерите и интерпретерите се имплентации на јазици, но самите тие не претставуваат јазици.Категоризирањето обично се рефлектира на најпознатите и најраширените имплементации на јазикот, на пример за BASIC се мисли дека е интерпретирачки јазик, додека за С компајлирачки, и покрај постоењето на BASIC КОМПАЈЛЕРИ И с ИНТЕРПРЕТЕРИ.

Но постојат и исклучоци, некои спецификации на јазици кажуваат дека во имплементацијата мора да се вклучи функционалноста на компајлерот (Common Lisp) додека други јазици имаат делови кои мозат многу лесно да се приспособат на интерпретер, но прават пишувањето на компајлер да биде многу тешко, за пример, SNOBOL4.

Хардвер компајлирање

Излезот на компајлирањето мора да влијае на хардверот на многу ниско ниво, на пример Field Programmable Gate Array (FPGA). Тие компајлери се наречени хардвер компајлери бидејќи програмите коишто тие ги компајлираат ефективно ја контролираат финалната конфигурација на хардверот и како истата работи.

Дизајн на компајлерот

Пристапот кон создавање на еден компајлер зависи од комплексноста на процесирањето кое треба да се направи, искуството на лицето кое го дизајнира, и на достапноста на ресурсите. Компајлер за релативно едноставен јазик напишан од некое лице мозе да биде многу едноставен софтвер. Но кога изворниот код е голем и комплексен и е потребен квалитетен излез тогаш дизајнот на компајлерот може да се подели во неколку фази или поминувања. Да се раздели работата во фази се мисли развојот може да се подели на мали делови и да се додели на различни лица да ги изработат. Исто така многу е полесно да се замени само еден дел со некоја негова подобрена верзија.

Поделбата на компајлирањето како процес беше предложено од Production Qualitu Compiler-Compiler Project на Carneige Mellon Универзитетот.Овој проект ги внесе термините “преден крај”, “среден крај” (кој ретко се користи) и “заден крај”.

Скоро сите помали компајлери имаат најмалку две фази. Но, овие фази обично се разгледуваат како дел од “предниот” или “задниот крај”. Местото каде овие “краеви” се сретнуваат секогаш било отворено за дебата. “Предниот крај” генерално работи за

8

Page 9: програмски јазик ц

синтаксичка и семаксичка анализа, заедно со преведувањето во понизок јазик од изворниот код.

“Средниот крај” обично е наменет за оптимизација на друг вид на код различен од изворниот или машинскиот. “Задноит крај “ го зема излезот на средниот крај , и потоа може да направи иште анализи, трансформации и оптимизации кои ќе ги направи за соодветнио компјутер. Потоа генерира код за соодветниот процесор и оперативен систем.

Пристапот со разделување на компајлирањето во фази преден/среден/ заден крај прави возможно комбинирањето на фазата на предниот крај за различни јазици со Collection и Amsterdam Compiler Kit.

Преден крај

Во фазата Преден крај се анализира изворниот код за да се изгради интерна репрезентација на програмата, наречена Инермедијална Репрезентација или ИР. Исто така се работи со табелата на симболи којашто е податочна структура која секој симбол од изворниот код му ја придава информацијата како локација и тип. Тоа се прави во неколку фази, меѓу кои ги вклучува и следниве:

Реконструкција на редовите –јазиците кои ги категоризираат нивните клучни зборови и дозволуваат празни места меѓу идентификаторите имаат потреба од фаза пред парсирањето, којашто ги конвертира влезните знаци во канонична форма подготвена за парсерот.Top-down рекурзивниот парсер кој користи табела користен во 60тите години чита од изворниот код знак по знак и не му е потребна посебна фаза за токенизирање.

Лексичка анализа -го дели изворниот код на мали делови наречени токени. Секој токен неделив дел од програмскиот јазик, на пример може да биде клучен збор, идентификатор, променлива или име на некој симбол. Синтаксата на токените е обично неко9ј регуларен јазик, па со помош на некоја форма за Конечен Автомат за соодветен регуларен израз тој токен може да биде препознаен. Софтверот кој се користи за лексичка анализа се нарекува лексер или лексички анализатор.

Препоцесирање -некои јазици како на пример С ја бараат оваа препроцесирачка фаза која поддржува макро супституција. Обично препроцесирањето се случува пред синтаксичката и семантичката анализа, како во примерот со програмскиот јазик С, и обично препроцесорот манипулира со лексички токени одколку со синтаксички

9

Page 10: програмски јазик ц

форми. Но, постојат и некои јазици, како на пример Scheme, кои поддржуваат макро супституција но, базирана на синтаксички форми.

Синтаксичка анализа вклучува парсирање на токените за да се идентификува структура на програмата. Оваа фаза буквално гради парсирачко дрво, кое што ја заменува линеарната структура на токените структура на дрво според правилата на формалната граматика која што ја дефинира синтаксата на јазикот. Парсирачкото дрво обично се анализира, проширува и трансформира од подоцнежните фази во компајлирањето.

Семантичка анализа -е фаза во која компајлерот додава семантички информации на парсирачкото дрво и ја гради табелата на симболи. Оваа фаза врши семантички проверки како што се проверка на типот, одбивање на неточни програми, дефинирање на активности и сигнализира со пораки за внимание. За семантичка анализа обично е потребно цело парсирачко дрво, што значи дека оваа фаза логички следува после фазата за парсирање, и претходи на фазата за генерирање на код.

Заден крај

Терминот “Заден крај” често се поистоветува генератор на код поради делумната функционалност на генерирање на асемблерски код. Некои литератури ја користат “Средната фаза” за да ги означат фазите на анализа и оптимизација.

Главни процеси се:

Анализа -ова е собирање на информациите од програмата за интермедиална репрезентација дадена од влезот. Типични анализи се: анализа на протокот на податоците, анализа на зависностите, анализа на имињата,анализа на покажувачите и escape анализата итн. Точноста на анализите е основна за оптимизацијата.

Оптимизација-интермедиалната репрезентација на јазикот е трансформирана во некој функционален еквивалент но во побрзи (помали) форми.

Генерирање на код-трансформалниот јазик се преведува ви излезен јазик, обично во соодветниот машински. Ова вклучува одлуки за ресурсите и меморијата, како што секоја од променливите да се стави во некој од регистрите, потоа планирањето на меморија и селекција и распоредот на соодветните машински инструции заедно со дадените адреси.

10

Page 11: програмски јазик ц

Постоењето на интерпроцедуралната анализа и оптимизација е вообичаена за компајлеите од IBM, SGI, Intel, Microsoft и Sun Microsystem.

Пример за компајлер

Следнава програма презентира многу прост компалјер напишан во С. Овој компалјер компајлира изрази дефинирани со infix нотација во postfix нотација. Овој компалјер користи рекурзивна стратегија, која се препознава по тоа што секоја функција кореспондира со нетерминален симбол во јазичната граматика.

11

Page 12: програмски јазик ц

ЗАКЛУЧОК

Од досега кажаното доаѓаме до заклучок најпрвин дека програмскиот јазик Ц е за општа намена и со него можат да се пишуваат најразлични видови програми. Неговите можности до израз доаѓаат со пишувањето на систематскиот софтвер. Додека пак Visual Basic. NET-овозможува рапиден развој на апликации со графички кориснички пристап до базите на податоци преку DAO, RDO и ADO и креирање на Active X контроли и објекти.Најмногу се користи за бизнис програмирање.

12

Page 13: програмски јазик ц

КОРИСТЕНА ЛИТЕРАТУРА

Википедиа-слободна енциклопедија-компјутерска техника и инфоррматика- Пеце Митревски

13

Page 14: програмски јазик ц

Содржина

1. Вовед ------------------------------------------------------------------------ 1

2. Содржина------------------------------------------------------------------- 2

3. ЈАVA ------------------------------------------------------------------------ 5

4. Историја ------------------------------------------------------------------- 7

5. Компајлер ----------------------------------------------------------------- 8

6. Пример за копмпајлер ---------------------------------------------- - 11

7. Заклучок ------------------------------------------------------------------12

8. Користена литература ------------------------------------------------13

9. Содржина ----------------------------------------------------------------14

14