__БЕЗКН__

’-{LOLCODE}- је езотерични програмски језик инспирисан -{LOL}- језиком ().

Креирао га је 2007. године Адам Линдзеј (), истраживач на рачунарском одсеку на Универзитету Ланкастер.

Језик није јасно дефинисан у смислу приоритета оператора и исправне синтаксе, али постоји неколико функционалних интерпретера и компајлера. Један интерпретер језика је доказао да је језик Тјуринг-потпун.

Структура и примери програмског језика Кључне речи овог језика су преузете из Интернет жаргона, познатог као . Карактеристике овог језика су скраћенице и неисправно написане речи. Први пример је једноставн програм који исписује -{HAI WORLD}-, тј. Здраво свете.

Пример 1 HAI 1.2 CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYEТумачење кода: КодЗначењеHAI [ВЕРЗИЈА]У свим LOLCODE програмима, HAI ("Hi!", "Здраво") започиње програм и одређује тачну верзију програма (иако се то у пракси не користи често).CAN HAS [БИБЛИОТЕКА]?У многим програмским језицима, једна од првих наредби је укључивање стандардне библиотеке за функције. Обично је то наредба: #include <stdio.h> ["stdio" скраћено од "standard input/output library"]. Ова команда има исто значење, проверава да ли је изабрана библиотека доступна и укључује је.VISIBLE "ПОРУКА" Приказује поруку на екрану.KTHXBYEКао што HAI започиње програм, KTHXBYE ("K," "THX," и "Bye" скраћено од "OK, thanks, bye", односно "У реду, хвала, здраво") завршава програм.

Пример 2 Следећи програм захтева отварање документа. У случају да је документ отворен приказује га, а у супротном избацује грешку.HAI 1.2 CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERROR!" KTHXBYEТумачење кода: КодЗначењеPLZ OPEN FILE "IME"?Отвара наведени фајл.AWSUM THX O NOESУ случају да је фајл отворен AWSUM THX (скраћено од енг. "Awesome, thanks!") даје даље наредбе; у супротном O NOES избацује грешку.I HAS A [ПРОМЕНЉИВА]Користи се за декларисање променљиве.BTWСлужи за остављање коментара. (Скраћеница за енг. "by the way").

Пример 3 HAI 1.0 CAN HAS STDIO? I HAS A VAR IM IN YR LOOP UP VAR!!1 VISIBLE VAR IZ VAR BIGGER THAN 10? KTHX IM OUTTA YR LOOP KTHXBYE

У датом програму наредба IM IN YR LOOP започиње петљу у којој се променљива повећава за 1, приказује и пореди са 10. Када достигне вредност 10 IM OUTTA YR LOOP излази из петље. Овај програм се у новијој верзији језика може кодирати и на следећи начин: HAI 1.2 CAN HAS STDIO? IM IN YR LOOP UPPIN YR VAR TIL BOTH SAEM VAR AN 10 VISIBLE SUM OF VAR AN 1 IM OUTTA YR LOOP KTHXBYE

Типови података Као и у већини других програмских језика у језику LOLCODE подаци су организовани у типове. При уносу променљиве тип података је одређен аутоматски према садржају, па не мора појединачно да се декларише. Међутим кориснику је дозвољено да сам изабере тип за одређену променљиву.

Списак типова података у језику LOLCODE: +УносТипI HAS A STRING ITZ "DOGZ ARE GOOOD"YARNI HAS A INTEGER ITZ 42NUMBRI HAS A FLOAT ITZ 3.1415NUMBARI HAS A BOOLEAN ITZ WINTROOFI HAS A UNTYPEDNOOB I HAS A AGE GIMMEH AGE BTW Променљива је сада типа YARN. За конвертовање у NUMBR: AGE IS NOW A NUMBR У претходном примеру команда GIMMEH очекује да корисник унесе вредност променљиве. Сваки садржај који корисник унесе аутоматски се региструје као текст (енг. string, у језику LOLCODE - yarn). Команда [ПРОМЕНЉИВА] IS NOW A [ТИП ПОДАТАКА] омогућава конверзију из једног типа података у други.

Оператори Као и у осталим програмским језицима и у језику LOLCODE се могу вршити различите операције. Операције међу променљивима се задају помоћу оператора. Оператори се могу поделити у неколико категорија.

Аритметички оператори Над операндима бројевних типова (NUMBR или NUMBAR ) могу се применити следећи аритметички оператори: +КодОперацијаSUM OF 21 AN 3321 + 33DIFF OF 90 AN 10 90 - 10PRODUKT OF 12 AN 1312 * 13QUOSHUNT OF 32 AN 4332 / 43MOD OF 43 AN 64 Остатак при дељењу 43 са 64 BIGGR OF 23 AN 53max(23, 53)SMALLR OF 53 AN 45min(53, 45)

Логички оператори Логички оператори примењују се над бројевним вредностима којима се придружују логичке или истинитосне вредности. Постоје следећи логички оператори: КодОперацијаBOTH OF WIN AN WINконјункцијаEITHER OF FAIL AN WINдисјункцијаWON OF WIN AN FAIL искључива дисјункцијаNOT FAILунарна негацијаALL OF WIN AN WIN MKAY конјункција бесконачне арностиANY OF WIN AN FAIL MKAYдисјункција бесконачне арности

Релацијски оператори Релацијски оператори примењују се над бројевним вредностима и као резултат дају истинитосну вредност у два облика КодОперацијаBOTH SAEM "CAT" AN "DOG" x == yDIFFRINT 732 AN 184x != yBOTH SAEM 12 AN BIGGR OF 12 AN 4x >= yBOTH SAEM 43 AN SMALLR OF 43 AN 56x <= yDIFFRINT 64 AN SMALLR OF 64 AN 2 x < yDIFFRINT 75 AN BIGGR OF 75 AN 643 x > y

Контрола тока Наредбе за контролу тока омогућавају различите начине извршавања програма, у зависности од вредности променљивих. Оне укључују наредбе гранања и петље.

Наредбе гранања Наредбе гранања или наредбе услова, на основу вредности неког израза, одређују наредбу или групу наредби које ће бити извршене.

Наредба if У општем случају ова наредба има следећи облик: [ИЗРАЗ 1], O RLY? YA RLY [НАРЕДБА 1] MEBBE [ИЗРАЗ 2] [НАРЕДБА 2] NO WAI [НАРЕДБА 3] Ова наредба прво проверава услов [ИЗРАЗ 1]; уколико је услов испуњен извршава се [НАРЕДБА 1], у супротном проверава се следећи услов, ако је он испуњен извршава се [НАРЕДБА 2], а ако ниједан од услова није испуњен прелази се на [НАРЕДБУ 3].

На конкретном примеру то изгледа овако: I HAS A ANIMAL GIMMEH ANIMAL BOTH SAEM ANIMAL AN "CAT", O RLY? YA RLY VISIBLE "YOU HAV A CAT" MEBBE BOTH SAEM ANIMAL AN "MAUS" VISIBLE "NOM NOM NOM. I EATED IT." NO WAI VISIBLE "AHHH IS A WOOF WOOF"

Наредба switch/case Ова наредба користи се за вишеструко одлучивање и у општем случају изгледа овако: ИЗРАЗ, WTF? OMG КОНСТАНТАН ИЗРАЗ 1 НАРЕДБА 1 GTFO OMG КОНСТАНТАН ИЗРАЗ 2 НАРЕДБА 2 BTW на крају наредбе нема `GTFO` тако да ће и следећи израз бити тестиран OMG КОНСТАНТАН ИЗРАЗ 3 НАРЕДБА 3 GTFO OMGWTF НАРЕДБА 4 Наредбе које треба извршити означене су случајевима (енг. case) за различите појединачне вредности израза. Сваком случају је придружен константан израз. Уколико задати израз има вредност неког од константних израза извршава се одговарајућа наредба. Наредба GTFO која се налази на крају случаја означава излазак из гранања. Уколико он недостаје прелази се на следећи случај. Случај OMGWTF извршава [НАРЕДБУ 4] уколико израз нема вредност ниједног од претходно наведених случајева. BTW Case statement: I HAS A COLOR GIMMEH COLOR COLOR, WTF? OMG "R" VISIBLE "RED FISH" GTFO OMG "Y" VISIBLE "YELLOW FISH" OMG "G" OMG "B" VISIBLE "FISH HAS A FLAVOR" GTFO OMGWTF VISIBLE "FISH IS TRANSPARENT OHNO WAT"

Петље Петље, односно циклуси или репититивне наредбе узрокују да се одређена наредба или група наредби извршава више пута, све док је неки логички услов испуњен. Разликујемо два типа петљи. У основи оне имају исту функцију али се могу користити обе у зависности од проблема ради боље читљивости кода.

Петља while Ова петља користи се за извршавање наредбе све док је одређени услов испуњен. У општем облику то изгледа овако: IM IN YR LOOP [НАРЕДБА] WILE [ИЗРАЗ] IM OUTTA YR LOOP Уласком у петљу услов [ИЗРАЗ] се изнова проверава и блок наредби се понавља све док истинитосна вредност израза постане нетачна. Тада се излази из петље и наставља се са извршавањем прве следеће команде у програму.

Пример овакве петље може бити: IM IN YR LOOP NERFIN YR ITERATOR WILE DIFFRINT ITERATOR AN -10 VISIBLE ITERATOR IM OUTTA YR LOOP

Петља for IM IN YR LOOP [ИЗРАЗ 1] TIL [ИЗРАЗ 2] AN ПРОМЕНЉИВА [НАРЕДБА] IM OUTTA YR LOOP [ИЗРАЗ 1] представља израз доделе и мења вредност релевантне променљиве, а [ИЗРАЗ 2] је релацијски и представља услов. Наредба се извршава све док услов не постане неиспуњен, а вредност релевантне променљиве се мења сваким проласком кроз петљу. То значи да услов није испуњен само у последњем проласку кроз петљу, након чега се излази из ње.

Пример овакве петље може бити: I HAS A TEMPERATURE GIMMEH TEMPERATURE TEMPERATURE IS NOW A NUMBR IM IN YR LOOP UPPIN YR ITERATOR TIL BOTH SAEM ITERATOR AN TEMPERATURE VISIBLE ITERATOR IM OUTTA YR LOOP

Имплементације Најновији и најсавременији интерпретор за језик LOLCODE је lci, који је написао Џастин Меза (Justin Meza) у програмском језику C. Он ефикасно интерпретира LOLCODE на разним платформама.

Прва имплементација LOLCODE била је PHP парсер који је написао Џеф Џоунс (Jeff Jones). То је била и прва веб страница која користи LOLCODE као стварни веб језик. Као отворени извор са лиценцом стила BSD-а, већина веб локација га је користила за имплементацију LOLCODE записа. Победничка презентација Pecha Kucha на PHP Works 2008. била је о овом парсеру.

Постоји .NET компајлер за LOLCODE који је написао Ник Џонсон (Nick Johnson), и представљен је на Microsoft семинарима за обуку за програмере, на конференцији TechEd 2007. године у Аустралији.

PL / LOLCODE, пројекат на челу са Џошом Толеијем (Josh Tolley), чини LOLCODE доступним као серверски програмски језик унутар PostgreSQL-а.

Microsoft Dynamic Language Runtime има имплементацију LOLCODE за потребе тестирања.

LOLCODE-java (JavaScript / преводилац за програмски језик LOLCODE) је доступан пројекат, али још увек није усклађен са верзијом 1.3. Такође је доступан и LOLCODE за ЈаvаScript преводиоца.

Постоји и компајлер LOLCODE укључен у виртуелну машину Parrot као један од језика који показују употребу Parrot-ових алатки за превођење.

Повезани пројекти LOLCODE је такође инспирисао LOLPython, који је написао Ендру Далке (енг. Andrew Dalke). LOLPython користи синтаксу инспирисану LOL језиком, сличну оној из LOLCODE-а, али са Python стилом. Ради на превођењу извора LOLPython у Python код.

ArnoldC је представник LOLCODE-а који замењује lol језик са цитатима из различитих филмова Арнолда Шварценегера.

Референце

Спољашње везе Преводилац, виртуелна машина и дебагер, креиран од стране Piper-а у језику C, за LOLCODE језик Верзија за паралелно и дистрибуирано рачунарство

Категорија:Програмски језици Категорија:Езотерични програмски језици Категорија:Програмирање