A LOLCODE programozási nyelv

Utasítások, vezérlési szerkezetek

Értékadás, deklarálás, adatok bekérése, kiírása

Változók

Láthatóság

A jelenlegi (1.2-es) verzióban minden változó a tartalmazó függvényre, vagy a main blokkra nézve lokális. A változók csak deklarálás után érhetőek el (ellentétben pl. a javascript-el, ahol függvény láthatóság van, vagyis ha a függvény végén deklarálunk egy változót, azt az elején is használhatjuk), és nincs globális láthatóság.

Elnevezés

Azonosítók betűvel kezdődnek, amit betű számjegy vagy alulvonás követhet. Kis és nagybetűk egyaránt használhatóak és a nyelv case-sensitive, vagyis a ’CAT’,’Cat’ és ’cat’ azonosítók különböző változókat jelölnek.

Deklaráció és értékadás

Egy változó deklarálása és értékadása egy utasításon belül I HAZ A változónév ITZ érték alakban történik az 1.2-es verzióban. A típuskonverziók automatikusan történnek. A nyelv dinamikusan tipizált. Amíg egy változó értéket nem kap típus nélküliként (NOOB) szerepel. A NOOB típusú változót csak TROOF (boolean) típusúvá castolható automatikusan, és hamisra értékelődik ki (FAIL). Minden más típus művelete (pl. Aritmetikai műveletek NOOB-on) hibát adnak. Az explicit típuskényszerítés minden más esetben üres illetve nulla értéket ad.

Példa:

I HAS A VAR ITZ 20 BTW a VAR változó értéke 20

Állítások

LOLCODE nyelvben helyesek azok a függvényhívások és kifejezések, amiknek eredményét nem tároljuk. Ezeknek a visszatérési értéke egy ideiglenes változóban tárolja a program, aminek neve IT. Ennek a változónak az értéke megmarad az adott blokk végrehajtásáig, vagy amíg egy újabb kifejezés kiértékelése felülírja.

A konzolra történő kiírásra a VISIBLE kulcsszó szolgál. Kötetlen paraméterszámú, minden paraméterét implicit módon YARN típusúvá konvertálja és konkatenálja. Az utasítás végét vesszővel, vagy sorvégével jelöljük. A kimenet végére egy kocsivissza karaktert ( :) ekvivalens a \n-el) tesz, kivéve, ha az utolsó paraméter után teszünk egy felkiáltójelet. Az 1.2 verzióban nincs mód fájlba írásra.

Példa:

VISIBLE "Said" VAR " !!"
Said 20 !!

Adatok bekérésére a konzolról a GIMMEH kulcsszóval történik.

Példa:

GIMMEH VAR

Operátorok

Szintaxis:

Az aritmetikai operátorok és függvények általánossan prefix jelölést alkalmaznak ( ), így összetett kifejezéseket tudunk írni minimális csoportosítással. Ha minden, a kifejezésben szereplő operátor és függvény paraméterszáma ismert, csoportosításra nincs szükség. Azonban, ha ez nem teljesül, akkor az MKAY kulcsszó zár le egy paraméterlistát. Az MKAY kulcsszó elhagyható, ha a sorvégével egybeesik. Az unáris operátorok szintaxisa . Bináris operátorok esetén az AN kulcsszó használható az operandusok elválasztására, de ez opcionális. A változó paraméterszámú operátorok szintaxisa a következő módon írható le: [[[AN] ] [AN] …] MKAY

A matematikai operátorok a következőek:

SUM OF AN BTW + DIFF OF AN BTW - PRODUKT OF AN BTW * QUOSHUNT OF AN BTW / MOD OF AN BTW modulo BIGGR OF AN BTW max SMALLR OF AN BTW min UPPIN BTW x++ NERFIN BTW x--

A matematikai operátorok argumentumai lehetnek kifejezések is, így ezen operátorok egymásba ágyazhatóak. Ha mindkét operandus NUMBR típusú akkor egész számokkal dolgozunk, ha valamelyik operandus NUMBAR típusú, a másik szükség esetén NUMBAR típusúra konvertálódik, és lebegőpontos számokkal dolgozunk. Ha az operandusok között szerepel YARN típusú, akkor attól függően, hogy tartalmaz-e tizedes pontot, egész vagy lebegőpontos számként értelmeződik. Amennyiben valamelyik operandus nem konvertálható számmá hibát kapunk.

A logikai operátorok:

BOTH OF [AN] BTW and: WIN iff x=WIN, y=WIN EITHER OF [AN] BTW or: FAIL iff x=FAIL, y=FAIL NOT BTW unary negation: WIN if x=FAIL

Összehasonlító operátorok

Numerikus összehasonlítás

Az összehasonlítás két NUMBR típusú változó esetén egész számokat hasonlít össze, ha valamelyik paraméter NUMBAR típusú, akkor a másik paraméter szükség esetén NUMBAR típusúra konvertálódik. Más típusok összehasonlítására nincs automatikus konverzió összehasonlítás előtt, így az 53 és ”53” kifejezések összehasonlítása FAIL eredményt fog adni. Az egyenlő és nem egyenlő összehasonlításon kívül nincs összehasonlító művelet így a nagyobb egyenlő és hasonló összehasonlításokat az egyenlőség és nagyobb műveletek vagy-olásával érhetjük el.

BOTH SAEM [AN] BTW WIN iff x == y DIFFRINT [AN] BTW WIN iff x != y BOTH SAEM AN BIGGR OF AN BTW x >= y BOTH SAEM AN SMALLR OF AN BTW x <= y DIFFRINT AN SMALLR OF AN BTW x > y DIFFRINT AN BIGGR OF AN BTW x < y

Típus kényszerítés

Azok az operátorok, amik adott típusokon működnek automatikus konverziót hajtanak végre az operandusaikon. Ha ez sikertelen, akkor hibát kapunk. Egy kifejezés típusát explicit módon konvertálhatjuk a MAEK bináris operátorral: MAEK [A] , ahol a egy a következőkből: TROOF, YARN, NUMBR, NUMBAR, NOOB. Ez csak a kifejezés értékének típusát változtatja meg, a kifejezésben szereplő változókét nem. Egy változó típusát a következő utasítással változtathatjuk meg: IS NOW A .

Konkatenáció

Több YARN típusú váltózó összefűzhető a SMOOSH [AN] … [AN] MKAY utasítással. Az AN kulcsszó opcipnális. Mivel a konkatenáció YARN-okat vár bemeneti értéknek, ezért az összes paramétert, amennyiben nem YARN típusú, implicit módon konvertálódik. A sorvége itt is kiválthatja az MKAY kulcsszót.

Elágazás, esetszétválasztás

Egy elágazáshoz négy kulcsszó szükséges: O RLY?,YA RLY,NO WAI és azOIC. Az O RLY? felel meg az if-nek, YA RLY az igaz ág, NO WAI a hamis ág. A YA RLY implicit módon le van zárva ha nem érjük el a NO WAI ágat, a NO WAI ágat az OIC zárja.

Példa:

BTW ha az ANIMAL macska, akkor a YA RLY, egyébként a NO WAI hajtódik végre BOTH SAEM ANIMAL AN "CAT", O RLY? YA RLY, VISIBLE "J00 HAV A CAT" NO WAI, VISIBLE "J00 SUX" OIC

Else-if

Az else-if konstrukció megvalósítható a YA RLY és NO WAI blokkok között elhelyezett MEBBE (a maybe kifejezés torzított változata) blokkokkal. Más nyelvekben megszokott módon, ha a MEBBE kulcsszó után szereplő kifejezés igaz, a blokk végrehajtódik, egyébként a következő blokkot hajtjuk végre. Példa:

BTW ha az ANIMAL macska, akkor YA RLY, ha az ANIMAL egér, akkor MEBBE hajtódik végre BOTH SAEM ANIMAL AN "CAT" O RLY? YA RLY, VISIBLE "J00 HAV A CAT" MEBBE BOTH SAEM ANIMAL AN "MAUS" VISIBLE "NOM NOM NOM. I EATED IT." OIC

Esetszétválasztás

Az esetszétválasztás kulcsszava a WTF?, egy összehasonlító blokk az OMG kulcsszóval kezdődik. Egy összehasonlító blokkban az OMG kulcsszót egy literál követi. Minden literálnak egyedinek kell lennie, és nem szerepelhet benne változó érték (a :{változó} alakban, bővebben a literáloknál.) Ha egy összehasonlító blokkban nem adunk meg break (GTFO) utasítást, a vezérlés ”továbbcsordul”, a következő blokkra ugrik. A GTFO felel meg a hagyományos break-nek, terminálja a blokkot és a WTF végére ugrik. Az opcionális OMGWTF kulcsszó után lévő utasítások akkor hajtódnak végre, ha egyik ágban sincs egyezés. Az OIC zárja az egészet.

Példa:

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" OIC

Ciklus

A ciklus az IM IN YR cimke kulcsszóval kezdődik és az IM OUTTA YR cimke kulcsszóval végződik. Az így definiált ciklus végtelen ciklus, amit eyplicit egy GTFO kulcsszóval kell terminálni. Jelenlegi verzióban az IM IN YR kifejezést követő cimke szükséges, de nincs felhasználva azon kívül, hogy jelölje a ciklus elejét és végét.

A nem végtelen ciklusok általános alakja a következő:

IM IN YR cimke operator YR valtozo [TIL|WILE kifejezés]
code block
IM OUTTA YR

A TIL használata esetén addig fut a ciklus amíg a kifejezés FAIL-re értékelődik ki, WILE esetén addig, amíg WIN-re.

Példa:

IM IN YR LOOP UPPIN YR VAR TIL BOTH SAEM VAR AN 10 VISIBLE VAR IM OUTTA YR LOOP