LOLCODE
’LOLCODE je ezoterični programski jezik inspirisan LOL jezikom[1] (engl. lolspeak).
LOLCODE | |
---|---|
Pojavio se | 2007. |
Dizajner(i) | Adam Lindzej |
Aktuelna verzija | v0.11.2 |
Uticao na | Lolcats |
Veb-sajt | lolcode |
Kreirao ga je 2007. godine Adam Lindzej (engl. Adam Lindsay), istraživač na računarskom odseku na Univerzitetu Lankaster.
Jezik nije jasno definisan u smislu prioriteta operatora i ispravne sintakse, ali postoji nekoliko funkcionalnih interpretera i kompajlera. Jedan interpreter jezika je dokazao da je jezik Tjuring-potpun.[2]
Struktura i primeri programskog jezika
urediKljučne reči ovog jezika su preuzete iz Internet žargona, poznatog kao lolcat. Karakteristike ovog jezika su skraćenice i neispravno napisane reči. Prvi primer je jednostavn program koji ispisuje HAI WORLD, tj. Zdravo svete.
Primer 1
urediHAI 1.2 CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE
Tumačenje koda:
Kod | Značenje |
---|---|
HAI [ВЕРЗИЈА]
|
U svim LOLCODE programima, HAI ("Hi!", "Zdravo") započinje program i određuje tačnu verziju programa (iako se to u praksi ne koristi često).
|
CAN HAS [БИБЛИОТЕКА]?
|
U mnogim programskim jezicima, jedna od prvih naredbi je uključivanje standardne biblioteke za funkcije. Obično je to naredba: #include <stdio.h> ["stdio" skraćeno od "standard input/output library"]. Ova komanda ima isto značenje, proverava da li je izabrana biblioteka dostupna i uključuje je.
|
VISIBLE "ПОРУКА"
|
Prikazuje poruku na ekranu. |
KTHXBYE
|
Kao što HAI započinje program, KTHXBYE ("K," "THX," i "Bye" skraćeno od "OK, thanks, bye", odnosno "U redu, hvala, zdravo") završava program.
|
Primer 2
urediSledeći program zahteva otvaranje dokumenta. U slučaju da je dokument otvoren prikazuje ga, a u suprotnom izbacuje grešku.
HAI 1.2 CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERROR!" KTHXBYE
Tumačenje koda:
Kod | Značenje |
---|---|
PLZ OPEN FILE "IME"?
|
Otvara navedeni fajl. |
AWSUM THX
|
U slučaju da je fajl otvoren AWSUM THX (skraćeno od eng. "Awesome, thanks!") daje dalje naredbe; u suprotnom O NOES izbacuje grešku.
|
I HAS A [ПРОМЕНЉИВА]
|
Koristi se za deklarisanje promenljive. |
BTW
|
Služi za ostavljanje komentara. (Skraćenica za eng. "by the way"). |
Primer 3
urediHAI 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
U datom programu naredba IM IN YR LOOP
započinje petlju u kojoj se promenljiva povećava za 1, prikazuje i poredi sa 10. Kada dostigne vrednost 10 IM OUTTA YR LOOP
izlazi iz petlje. Ovaj program se u novijoj verziji jezika može kodirati i na sledeći način:
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
Tipovi podataka
urediKao i u većini drugih programskih jezika u jeziku LOLCODE podaci su organizovani u tipove. Pri unosu promenljive tip podataka je određen automatski prema sadržaju, pa ne mora pojedinačno da se deklariše. Međutim korisniku je dozvoljeno da sam izabere tip za određenu promenljivu.
Spisak tipova podataka u jeziku LOLCODE[4]:
Unos | Tip |
---|---|
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
U prethodnom primeru komanda GIMMEH
očekuje da korisnik unese vrednost promenljive. Svaki sadržaj koji korisnik unese automatski se registruje kao tekst (eng. string, u jeziku LOLCODE - yarn). Komanda [ПРОМЕНЉИВА] IS NOW A [ТИП ПОДАТАКА]
omogućava konverziju iz jednog tipa podataka u drugi.
Operatori
urediKao i u ostalim programskim jezicima i u jeziku LOLCODE se mogu vršiti različite operacije. Operacije među promenljivima se zadaju pomoću operatora. Operatori se mogu podeliti u nekoliko kategorija.
Aritmetički operatori
urediNad operandima brojevnih tipova (NUMBR ili NUMBAR ) mogu se primeniti sledeći aritmetički operatori:
Kod | Operacija |
---|---|
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 | Ostatak pri deljenju 43 sa 64 |
BIGGR OF 23 AN 53 | max(23, 53) |
SMALLR OF 53 AN 45 | min(53, 45) |
Logički operatori
urediLogički operatori primenjuju se nad brojevnim vrednostima kojima se pridružuju logičke ili istinitosne vrednosti. Postoje sledeći logički operatori:
Kod | Operacija |
---|---|
BOTH OF WIN AN WIN | konjunkcija |
EITHER OF FAIL AN WIN | disjunkcija |
WON OF WIN AN FAIL | isključiva disjunkcija |
NOT FAIL | unarna negacija |
ALL OF WIN AN WIN MKAY | konjunkcija beskonačne arnosti |
ANY OF WIN AN FAIL MKAY | disjunkcija beskonačne arnosti |
Relacijski operatori
urediRelacijski operatori primenjuju se nad brojevnim vrednostima i kao rezultat daju istinitosnu vrednost u dva oblika
Kod | Operacija |
---|---|
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 |
Kontrola toka
urediNaredbe za kontrolu toka omogućavaju različite načine izvršavanja programa, u zavisnosti od vrednosti promenljivih. One uključuju naredbe grananja i petlje.
Naredbe grananja
urediNaredbe grananja ili naredbe uslova, na osnovu vrednosti nekog izraza, određuju naredbu ili grupu naredbi koje će biti izvršene.
Naredba if
urediU opštem slučaju ova naredba ima sledeći oblik:
[ИЗРАЗ 1], O RLY? YA RLY [НАРЕДБА 1] MEBBE [ИЗРАЗ 2] [НАРЕДБА 2] NO WAI [НАРЕДБА 3]
Ova naredba prvo proverava uslov [ИЗРАЗ 1]
; ukoliko je uslov ispunjen izvršava se [НАРЕДБА 1]
, u suprotnom proverava se sledeći uslov, ako je on ispunjen izvršava se [НАРЕДБА 2]
, a ako nijedan od uslova nije ispunjen prelazi se na [НАРЕДБУ 3]
.
Na konkretnom primeru to izgleda ovako:
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"
Naredba switch/case
urediOva naredba koristi se za višestruko odlučivanje i u opštem slučaju izgleda ovako:
ИЗРАЗ, WTF? OMG КОНСТАНТАН ИЗРАЗ 1 НАРЕДБА 1 GTFO OMG КОНСТАНТАН ИЗРАЗ 2 НАРЕДБА 2 BTW на крају наредбе нема `GTFO` тако да ће и следећи израз бити тестиран OMG КОНСТАНТАН ИЗРАЗ 3 НАРЕДБА 3 GTFO OMGWTF НАРЕДБА 4
Naredbe koje treba izvršiti označene su slučajevima (eng. case) za različite pojedinačne vrednosti izraza. Svakom slučaju je pridružen konstantan izraz. Ukoliko zadati izraz ima vrednost nekog od konstantnih izraza izvršava se odgovarajuća naredba. Naredba GTFO
koja se nalazi na kraju slučaja označava izlazak iz grananja. Ukoliko on nedostaje prelazi se na sledeći slučaj. Slučaj OMGWTF
izvršava [НАРЕДБУ 4]
ukoliko izraz nema vrednost nijednog od prethodno navedenih slučajeva.
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"
Petlje
urediPetlje, odnosno ciklusi ili repititivne naredbe uzrokuju da se određena naredba ili grupa naredbi izvršava više puta, sve dok je neki logički uslov ispunjen. Razlikujemo dva tipa petlji. U osnovi one imaju istu funkciju ali se mogu koristiti obe u zavisnosti od problema radi bolje čitljivosti koda.
Petlja while
urediOva petlja koristi se za izvršavanje naredbe sve dok je određeni uslov ispunjen. U opštem obliku to izgleda ovako:
IM IN YR LOOP [НАРЕДБА] WILE [ИЗРАЗ] IM OUTTA YR LOOP
Ulaskom u petlju uslov [ИЗРАЗ]
se iznova proverava i blok naredbi se ponavlja sve dok istinitosna vrednost izraza postane netačna. Tada se izlazi iz petlje i nastavlja se sa izvršavanjem prve sledeće komande u programu.
Primer ovakve petlje može biti:
IM IN YR LOOP NERFIN YR ITERATOR WILE DIFFRINT ITERATOR AN -10 VISIBLE ITERATOR IM OUTTA YR LOOP
Petlja for
urediIM IN YR LOOP [ИЗРАЗ 1] TIL [ИЗРАЗ 2] AN ПРОМЕНЉИВА [НАРЕДБА] IM OUTTA YR LOOP
[ИЗРАЗ 1]
predstavlja izraz dodele i menja vrednost relevantne promenljive, a [ИЗРАЗ 2]
je relacijski i predstavlja uslov. Naredba se izvršava sve dok uslov ne postane neispunjen, a vrednost relevantne promenljive se menja svakim prolaskom kroz petlju. To znači da uslov nije ispunjen samo u poslednjem prolasku kroz petlju, nakon čega se izlazi iz nje.
Primer ovakve petlje može biti:
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
Implementacije
urediNajnoviji i najsavremeniji interpretor za jezik LOLCODE je lci, koji je napisao Džastin Meza (Justin Meza) u programskom jeziku C. On efikasno interpretira LOLCODE na raznim platformama.[5]
Prva implementacija LOLCODE bila je PHP parser koji je napisao Džef Džouns (Jeff Jones).[6] To je bila i prva veb stranica koja koristi LOLCODE kao stvarni veb jezik. Kao otvoreni izvor sa licencom stila BSD-a, većina veb lokacija ga je koristila za implementaciju LOLCODE zapisa. Pobednička prezentacija Pecha Kucha na PHP Works 2008. bila je o ovom parseru.
Postoji .NET kompajler za LOLCODE koji je napisao Nik Džonson (Nick Johnson)[7], i predstavljen je na Microsoft seminarima za obuku za programere, na konferenciji TechEd 2007. godine u Australiji.[8][9]
PL / LOLCODE, projekat na čelu sa Džošom Toleijem (Josh Tolley), čini LOLCODE dostupnim kao serverski programski jezik unutar PostgreSQL-a.
Microsoft Dynamic Language Runtime ima implementaciju LOLCODE za potrebe testiranja.
LOLCODE-java (JavaScript / prevodilac za programski jezik LOLCODE) je dostupan projekat, ali još uvek nije usklađen sa verzijom 1.3. Takođe je dostupan i LOLCODE za JavaScript prevodioca.
Postoji i kompajler LOLCODE uključen u virtuelnu mašinu Parrot kao jedan od jezika koji pokazuju upotrebu Parrot-ovih alatki za prevođenje.
Povezani projekti
urediLOLCODE je takođe inspirisao LOLPython, koji je napisao Endru Dalke (eng. Andrew Dalke). LOLPython koristi sintaksu inspirisanu LOL jezikom, sličnu onoj iz LOLCODE-a, ali sa Python stilom. Radi na prevođenju izvora LOLPython u Python kod.[10]
ArnoldC je predstavnik LOLCODE-a koji zamenjuje lol jezik sa citatima iz različitih filmova Arnolda Švarcenegera.[11]
Reference
uredi- ^ „Web photo phenomenon centers on felines, poor spelling”. Houston Chronicle. 05. 06. 2007. Pristupljeno 25. 10. 2018.
- ^ „Proof that LOLCode is turing complete:BrainF*** interpreter in LOLCode”. 11. 07. 2007. Arhivirano iz originala 11. 07. 2007. g. Pristupljeno 17. 10. 2018.
- ^ „home · LOLCODE”. 02. 10. 2007. Arhivirano iz originala 02. 10. 2007. g. Pristupljeno 25. 10. 2018.
- ^ „Learn LOLCODE in Y Minutes”. learnxinyminutes.com. Pristupljeno 25. 10. 2018.
- ^ „LOLCODE”. lolcode.org. Pristupljeno 25. 10. 2018.
- ^ Lindsay, Adam T. „lolcode”. atl.me (na jeziku: engleski). Arhivirano iz originala 24. 08. 2017. g. Pristupljeno 25. 10. 2018.
- ^ „Google Code Archive - Long-term storage for Google Code Project Hosting.”. code.google.com (na jeziku: engleski). Pristupljeno 25. 10. 2018.
- ^ „TechEd Day 2: Microsoft announces LOLCode support and Cheezburger Studios”. istartedsomething (na jeziku: engleski). 09. 08. 2007. Pristupljeno 25. 10. 2018.
- ^ Bort, Julie. „LOLcode in next Visual Studio? For young and funny cats”. Network World (na jeziku: engleski). Pristupljeno 25. 10. 2018.
- ^ „LOLPython”. www.dalkescientific.com. Pristupljeno 25. 10. 2018.
- ^ „ArnoldC”. lhartikk.github.io. Pristupljeno 25. 10. 2018.