мини|Учебници по програмски јазици Програмски јазик е формален јазик за презентација (нотација) на сметачки програми. Со негова помош, преку разбирлив текст за човекот, се даваат команди и инсктрукции за извршување на интерни задачи, опис на влезни и излезни податоци како и нивна структура во зависност од интерни (во системот) и надворешни (надвор од системот) случувања. Програмските јазици се употребуваат да се создадат програми кои го контролираат однесувањето на машината, точно да изразат алгоритми.
Најраните програмски јазици датираат од пред откривањето на сметачот, и се користат за насочување на однесувањето на машините, како што се Жакарови разбои. Илјадници различни јазици за програмирање се создадени, главно во областа на компјутерите и многу повеќе се создаваат секоја година. Повеќето програмски јазици опишуваат пресметка во заповеден стил, односно, како низа на команди, иако некои јазици, како што се оние кои го поддржуваат функционалното програмирање или логичкото програмирање, користат алтернативни форми на приказ.
Програмскиот јазик е најчесто поделен на два составни дела од синтаксата (форма) и семантика (значење) и многу програмски јазици имаат некој вид на писмени спецификации за нивната синтакса и/или семантика. Некои јазици се дефинирани со документот за спецификација, на пример програмскиот јазик C е специфициран од страна на ИСО стандард, додека други јазици, како Perl, имаат доминантно извршување, кое се користи како упат.
Дефиниции Програмскиот јазик е нотација за пишување на програми, кои се инструкции на една пресметка или алгоритам. Некои, но не сите автори го ограничуваат терминот "програмски јазик" на оние јазици кои можат да ги изразат сите можни алгоритми. Одлики кои се сметаат за важни за она што претставува програмски јазик се: Функција и цел: компјутерски програмски јазик е јазик кој се користи за пишување компјутерски програми, кои вклучуваат компјутерско вршење некој вид на пресметка или алгоритам и можна контрола на надворешни уреди како на пример печатачи, дискови, роботи, и така натаму. Општо земено, програмскиот јазик може да опише пресметка на некоја апстрактна машина. Општо е прифатено дека комплетната спецификација за програмскиот јазик вклучува опис, по можност идеализиран, на машина или обработувач за тој јазик. Програмските јазици се разликуваат од природните јазици со тоа што природниот јазик се користи само за интеракција меѓу луѓето, додека програмските јазици, им овозможи на луѓето да пренесуваат инструкции на машини. Абстракции: програмските јазици, обично содржат апстракции за дефинирање и манипулирање со структури на податоци или контрола на протокот на извршување. Практичната потреба програмскиот јазик да поддржува соодветни апстракции се изразува преку принцип на апстракција; овој принцип е формулиран како препорака до програмерот да се направи правилна употреба на апстракциите. експресивна моќ: Теоријата на пресметување ги класифицира јазиците според пресметките кои се способни да ги изразат.
Јазиците за означување како XML, HTML или trof кои дефинираат структурирани податоци, не се сметаат за програмски јазици. Програмските јазици можат да ја делат синтаксата со овие јазици за означување ако семантиката за пресметување е дефинирана.
Терминот компјутерски јазик понекогаш се користи наизменично со терминот програмски јазик. Меѓутоа, употребата на двата термини зависи од авторите, вклучувајќи ја гледната точка на секој. Едната употреба ги опишува програмските јазици како подмножество на компјутерските јазици. Според тоа, јазиците употребени за пресметување кои имаат различна цел од изразување на компјутерски програми се генерички дизајнирани компјутерски јазици. На пример означувачките јазици понекогаш се однесуваат како компјутерски јазици за да се истакне дека тие не се наменети за програмирање. Друга употреба ги опишува програмските јазици како теоретски конструкции за програмирање на апстрактни машини, и компјутерски јазици како подмножеството кое работи на физичките компјутери, кои имаат конечни хардверски ресурси.
Елементи
Сите програмски јазици имаат некои примитивни градбени блокови за опишување на податоци и процесите или трансформациите кои се применуваат на нив (како додавањето на два броја или на селекцијата на ставка од колекција). Овие примитиви се дефинирани од страна на синтаксички и семантички правила кои ја опишуваат нивната структура и значење, соодветно.
Синтакса
Површинската форма на програмскиот јазик е позната како негова синтакса. Повеќето програмски јазици се чисто текстуални, тие користат низа на текстот вклучувајќи зборови, бројки, интерпункција, слично како што се пишуваат природните јазици. Од друга страна, постојат некои програмски јазици кои се графички по природа, користат визуелни односи меѓу симболите за да создадат програма.
Синтаксата на јазикот опишува можни комбинации на симболите што формираат синтаксички исправна програма. Значењето зададено со комбинација на симболи е управувано од семантика.
Синтаксата на програмскиот јазик е обично дефинирана со користење на комбинација на регуларни изрази (за лексички структура) и Backus-Naur формулар (за граматичка структура). Подолу е едноставна граматика, заснована на Lisp:
expression ::= atom | list atom ::= number | symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z'<nowiki>'</nowiki>a'-'z'].* list ::= '(' expression* ')'
Оваа граматика го одредува следното: израз е или atom или list; atom е или number или symbol; number е непрекината низа на една или повеќе децимални цифри, опционално на кое му претходи плус или минус; symbol е буква проследено со нула или повеќе какви било знаци (со исклучок на празните места) и list е поврзан пар загради, со нула или повеќе изрази во него.
Не сите синтаксички точни програми се семантички точни. Многу програми се синтаксички исправни, сепак лошо формирани, по правилата на јазикот, и може да (во зависност од спецификацијата на јазикот и исправноста на имплементација) резултира со грешка во преводот или извршувањето. Во некои случаи, овие програми може да резултираат со недефинирано однесување. Дури и кога програмата е добро дефинирана во еден јазик, таа сепак може да има значење кое не е посакувано од страна на лицето кое ја напишал.
Користејќи го природниот јазик како пример, можеби нема да биде можно да се додели значење на граматички правилна реченица или реченицата може да биде погрешна: "Безбојно зелени идеи спијат бесно." е граматички добро формиран, но нема општо прифатени значења. "Џон е мажена диплома." е граматички добро формиран, но изразува значење што не може да биде вистина. Следниот фрагмент од јазикот C е синтаксички исправен, но извршува операција што не е дефинирана семантички (затоа што p е нулти покажувач, операциите p-> real и p-> im немаат значење): complex *p = NULL; complex abs_p = sqrt(*p >> 4 + p->im); Ако напишаниот исказ во првиот ред беше испуштен, програмата ќе предизвика грешка на компилацијата, променливата "п" нема да биде дефинирана. Но, програмата сè уште ќе биде синтаксички исправна, бидејќи напишаниот исказ обезбеди само семантичка информација.
Семантика Терминот семантика се однесува на значењето на јазиците, спротивно на нивната форма (синтакса). Статична семантика Статичката семантика дефинира ограничувања во поглед на структурата на валидни текстови кои се тешко или невозможно да се изразат во стандардни синтаксички формализми. За компилирани јазици, статичната семантика во суштина вклучува семантички правила кои можат да се проверат со компајлирање. Примерите вклучуваат проверка дека секој идентификатор е признат пред да се користи (во јазиците кои бараат такви декларации). Многу важни ограничувања од овој тип, како проверка дека идентификатори се користат во соодветен контекст (на пример, не додавање на цел број на името на функцијата), или дека потпрограмски повици имаат соодветен број и вид на аргументи може да се спроведува од страна на нивно дефинирање како правила на логиката наречени type систем. Други форми на статички анализи како анализи на протокот на податоци исто така можат да бидат дел од статични семантика. Динамична семантика Откако податоците се специфицирани, на машината треба да ѝ биде дадено да врши операции на податоците. На пример, семантиката може да дефинира стратегија со која изразите се оценуваат до вредности, или начинот на кој контролните структури условно извршувааат пресметки. Динамичниата семантика (исто така познат како извршувачка семантиката) на еден јазик дефинира како и кога различни конструкции на еден јазик треба да произведат однесување на програмата. Постојат многу начини на дефинирање на извршувачката семантика. Природниот јазик најчесто се користи да се определи извршувачката семантика на јазиците кои вообичаено се користат во пракса. Значителен дел од академските истражувања отиде во формалната семантика на програмските јазици, кои дозволуваат извршување семантиката за да биде поблиску специфицирана во формален начин. Резултати од ова поле на истражување видовме ограничена примена на програмскиот јазик дизајн и имплементација надвор од академијата. Стандардна библиотека Повеќето програмски јазици имаат поврзана основна библиотека (понекогаш е позната како "стандардна библиотека", особено ако е вклучена како дел од објавениот стандард на јазикот), која е вообичаено ставена на располагање на сите имплементации на јазикот. Основните библиотеки обично вклучуваат и дефиниции за вообичаено користените алгоритми, структури на податоци, и механизми за влез и излез.
Дизајн и извршување
Програмските јазици делат својства со природните јазици поврзани со нивната намена како начин на комуникација, има синтаксичка форма одвоена од својата семантика. А значајна разлика е тоа што програмски јазик може да биде целосно опишан и студиран во целост, бидејќи има прецизна и конечна дефениција. Од друга страна, природните јазици имаат променливи значења дадени од страна на нивните корисници во различни заедници.
Многу јазици се дизајнирани од нула, променети да се задоволат новите потреби, во комбинација со други јазици, и на крајот неупотребливи. Иако имало обиди да се дизајнира еден "универзален" програмски јазик кој служи за сите намени, сите тие не успеале да бидат општо прифатени за оваа улога. Потребата за различни програмски јазици произлегува од различноста на контекстите во кои се употребени јазиците:
Ранг на програми од мали скрипти напишани од поединечни хобисти до огромни системи напишани од стотици програмери. Ранг на програмери во експертиза од дебитанти на кои им треба едноставност пред се, до експерти на кои не им смета изразена комплексност. Програмите мора да балансираат брзина, големина и едноставност на системите во ранг од микроконтролери до суперкомпјутери. Програмите можат да бидат напишани еднас и да не се променат со генерации, или може да подлежат на континуитетна модификација. Или едноставно програмерите може да се разликуваат во нивните вкусови: тие може да се навикнати на дискутирање на проблеми и изразување на истите во одреден јазик.
Една заеднички тренд во развојот на програмските јазици е да се додаде повеќе способност да се решаваат проблемите со помош на повисоко ниво на апстракција. Најраните програмски јазици беа врзани многу тесно со основните хардверот на компјутерот. Како се развиваат нови програмски јазици, се додаваат одлики кои им дозволуваат на програмерите да изразат идеи кои сè повеќе се оддалечуваат од едноставен превод на основните хардверски инструкции. Бидејќи програмерите се помалку врзани за сложеноста на компјутерот, нивните програми можат да направат повеќе пресметки со помалку напор на програмерот.
Дизајнерите на јазикот и корисниците мора да конструираат голем број на примитиви кои ја управуваат и овозможуваат практиката на програмирање. Најважните од нив се спецификацијата и имплементацијата на јазикот.
Спецификација