LOLCODE
From Wikipedia, the free encyclopedia
Remove ads
’ је езотерични програмски језик инспирисан језиком[1] (енгл. ).
Креирао га је 2007. године Адам Линдзеј (енгл. ), истраживач на рачунарском одсеку на Универзитету Ланкастер.
Језик није јасно дефинисан у смислу приоритета оператора и исправне синтаксе, али постоји неколико функционалних интерпретера и компајлера. Један интерпретер језика је доказао да је језик Тјуринг-потпун.[2]
Remove ads
Структура и примери програмског језика
Кључне речи овог језика су преузете из Интернет жаргона, познатог као lolcat. Карактеристике овог језика су скраћенице и неисправно написане речи. Први пример је једноставн програм који исписује , тј. Здраво свете.
Пример 1
HAI 1.2 CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE
Тумачење кода:
Пример 2
Следећи програм захтева отварање документа. У случају да је документ отворен приказује га, а у супротном избацује грешку.
HAI 1.2 CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERROR!" KTHXBYE
Тумачење кода:
Пример 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
Remove ads
Типови података
Као и у већини других програмских језика у језику LOLCODE подаци су организовани у типове. При уносу променљиве тип података је одређен аутоматски према садржају, па не мора појединачно да се декларише. Међутим кориснику је дозвољено да сам изабере тип за одређену променљиву.
Списак типова података у језику LOLCODE[4]:
I HAS A AGE GIMMEH AGE BTW Променљива је сада типа YARN. За конвертовање у NUMBR: AGE IS NOW A NUMBR
У претходном примеру команда GIMMEH
очекује да корисник унесе вредност променљиве. Сваки садржај који корисник унесе аутоматски се региструје као текст (енг. string, у језику LOLCODE - yarn). Команда [ПРОМЕНЉИВА] IS NOW A [ТИП ПОДАТАКА]
омогућава конверзију из једног типа података у други.
Remove ads
Оператори
Као и у осталим програмским језицима и у језику LOLCODE се могу вршити различите операције. Операције међу променљивима се задају помоћу оператора. Оператори се могу поделити у неколико категорија.
Аритметички оператори
Над операндима бројевних типова (NUMBR или NUMBAR ) могу се применити следећи аритметички оператори:
Логички оператори
Логички оператори примењују се над бројевним вредностима којима се придружују логичке или истинитосне вредности. Постоје следећи логички оператори:
Релацијски оператори
Релацијски оператори примењују се над бројевним вредностима и као резултат дају истинитосну вредност у два облика
Контрола тока
Наредбе за контролу тока омогућавају различите начине извршавања програма, у зависности од вредности променљивих. Оне укључују наредбе гранања и петље.
Наредбе гранања
Наредбе гранања или наредбе услова, на основу вредности неког израза, одређују наредбу или групу наредби које ће бити извршене.
Наредба 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
Remove ads
Имплементације
Најновији и најсавременији интерпретор за језик 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-ових алатки за превођење.
Remove ads
Повезани пројекти
LOLCODE је такође инспирисао LOLPython, који је написао Ендру Далке (енг. Andrew Dalke). LOLPython користи синтаксу инспирисану LOL језиком, сличну оној из LOLCODE-а, али са Python стилом. Ради на превођењу извора LOLPython у Python код.[10]
ArnoldC је представник LOLCODE-а који замењује lol језик са цитатима из различитих филмова Арнолда Шварценегера.[11]
Референце
Спољашње везе
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads