’LOLCODE је езотерични програмски језик инспирисан LOL језиком[1] (енгл. lolspeak).

LOLCODE
велика
Појавио се2007.
Дизајнер(и)Адам Линдзеј
Актуелна верзијаv0.11.2
Утицао наLolcats
Веб-сајтlolcode.org

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

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

Структура и примери програмског језика

уреди

Кључне речи овог језика су преузете из жаргонског интернет језика, који је познатији као lolcat Internet meme. Карактеристике овог језика су скраћенице и неисправно написане речи. Први пример је једноставн програм који исписује "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

[3]

У датом програму наредба 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[4]:

Унос Тип
I HAS A STRING ITZ "DOGZ ARE GOOOD" YARN
I HAS A INTEGER ITZ 42 NUMBR
I HAS A FLOAT ITZ 3.1415 NUMBAR
I HAS A BOOLEAN ITZ WIN TROOF
I HAS A UNTYPED NOOB
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 33 21 + 33
DIFF OF 90 AN 10 90 - 10
PRODUKT OF 12 AN 13 12 * 13
QUOSHUNT OF 32 AN 43 32 / 43
MOD OF 43 AN 64 Остатак при дељењу 43 са 64
BIGGR OF 23 AN 53 max(23, 53)
SMALLR OF 53 AN 45 min(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 == y
DIFFRINT 732 AN 184 x != y
BOTH SAEM 12 AN BIGGR OF 12 AN 4 x >= y
BOTH SAEM 43 AN SMALLR OF 43 AN 56 x <= y
DIFFRINT 64 AN SMALLR OF 64 AN 2 x < y
DIFFRINT 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 на разним платформама.[5]

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

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

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 код.[10]

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

Референце

уреди
  1. ^ „Web photo phenomenon centers on felines, poor spelling”. Houston Chronicle. 05. 06. 2007. Приступљено 25. 10. 2018. 
  2. ^ „Proof that LOLCode is turing complete:BrainF*** interpreter in LOLCode”. 11. 07. 2007. Архивирано из оригинала 11. 07. 2007. г. Приступљено 17. 10. 2018. 
  3. ^ „home · LOLCODE”. 02. 10. 2007. Архивирано из оригинала 02. 10. 2007. г. Приступљено 25. 10. 2018. 
  4. ^ „Learn LOLCODE in Y Minutes”. learnxinyminutes.com. Приступљено 25. 10. 2018. 
  5. ^ „LOLCODE”. lolcode.org. Приступљено 25. 10. 2018. 
  6. ^ Lindsay, Adam T. „lolcode”. atl.me (на језику: енглески). Архивирано из оригинала 24. 08. 2017. г. Приступљено 25. 10. 2018. 
  7. ^ „Google Code Archive - Long-term storage for Google Code Project Hosting.”. code.google.com (на језику: енглески). Приступљено 25. 10. 2018. 
  8. ^ „TechEd Day 2: Microsoft announces LOLCode support and Cheezburger Studios”. istartedsomething (на језику: енглески). 09. 08. 2007. Приступљено 25. 10. 2018. 
  9. ^ Bort, Julie. „LOLcode in next Visual Studio? For young and funny cats”. Network World (на језику: енглески). Приступљено 25. 10. 2018. 
  10. ^ „LOLPython”. www.dalkescientific.com. Приступљено 25. 10. 2018. 
  11. ^ „ArnoldC”. lhartikk.github.io. Приступљено 25. 10. 2018. 

Спољашње везе

уреди
  NODES
INTERN 1
Project 1