LOLCODE
’LOLCODE је езотерични програмски језик инспирисан LOL језиком[1] (енгл. lolspeak).
LOLCODE | |
---|---|
Појавио се | 2007. |
Дизајнер(и) | Адам Линдзеј |
Актуелна верзија | v0.11.2 |
Утицао на | Lolcats |
Веб-сајт | lolcode |
Креирао га је 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
|
У случају да је фајл отворен 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[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]
Референце
уреди- ^ „Web photo phenomenon centers on felines, poor spelling”. Houston Chronicle. 05. 06. 2007. Приступљено 25. 10. 2018.
- ^ „Proof that LOLCode is turing complete:BrainF*** interpreter in LOLCode”. 11. 07. 2007. Архивирано из оригинала 11. 07. 2007. г. Приступљено 17. 10. 2018.
- ^ „home · LOLCODE”. 02. 10. 2007. Архивирано из оригинала 02. 10. 2007. г. Приступљено 25. 10. 2018.
- ^ „Learn LOLCODE in Y Minutes”. learnxinyminutes.com. Приступљено 25. 10. 2018.
- ^ „LOLCODE”. lolcode.org. Приступљено 25. 10. 2018.
- ^ Lindsay, Adam T. „lolcode”. atl.me (на језику: енглески). Архивирано из оригинала 24. 08. 2017. г. Приступљено 25. 10. 2018.
- ^ „Google Code Archive - Long-term storage for Google Code Project Hosting.”. code.google.com (на језику: енглески). Приступљено 25. 10. 2018.
- ^ „TechEd Day 2: Microsoft announces LOLCode support and Cheezburger Studios”. istartedsomething (на језику: енглески). 09. 08. 2007. Приступљено 25. 10. 2018.
- ^ Bort, Julie. „LOLcode in next Visual Studio? For young and funny cats”. Network World (на језику: енглески). Приступљено 25. 10. 2018.
- ^ „LOLPython”. www.dalkescientific.com. Приступљено 25. 10. 2018.
- ^ „ArnoldC”. lhartikk.github.io. Приступљено 25. 10. 2018.