LOLCODE |
---|
|
Појавио се | 2007. |
---|
Дизајнер(и) | Адам Линдзеј |
---|
Актуелна верзија | v0.11.2 |
---|
Утицао на | Lolcats |
---|
Веб-сајт | lolcode.org |
---|
’LOLCODE је езотерични програмски језик инспирисан LOL језиком[1] (енгл. lolspeak).
Креирао га је 2007. године Адам Линдзеј (енгл. Adam Lindsay), истраживач на рачунарском одсеку на Универзитету Ланкастер.
Језик није јасно дефинисан у смислу приоритета оператора и исправне синтаксе, али постоји неколико функционалних интерпретера и компајлера. Један интерпретер језика је доказао да је језик Тјуринг-потпун.[2]
Структура и примери програмског језика
Кључне речи овог језика су преузете из Интернет жаргона, познатог као lolcat. Карактеристике овог језика су скраћенице и неисправно написане речи. Први пример је једноставн програм који исписује 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]
Референце
Спољашње везе