# LOLCODE

LOLCODE és un llenguatge de programació esotèric inspirat en el llenguatge expressat en exemples del meme d'internet lolcat. El llenguatge va ser creat el 2007 per Adam Lindsay, investigador al Departament de Computació de la Universitat de Lancaster. El llenguatge està clarament definit respecte a prioritat d'operadors i sintaxi correcta, però ja existeixen diferents interpretadors i compiladors funcionals. S'ha demostrat que el llenguatge és Turing complet.

## Estructura del llenguatge
### Paraules reservades

Les paraules reservades del LOLCODE es treuen del patuès altament comprimit (abreviat) del meme d'Internet lolcat. Totes les paraules reservades s'escriuen en majúscula.
       Codi Comentari HAI En tots els programes en LOLCODE, HAI introdueix el programa. BTW Comment Introdueix un comentari d'una línia. Es pot utilitzar OBTW Comment TLDR per fer comentaris de múltiples línies. CAN HAS [library]? En molts llenguatges de programació, una de les primeres instruccions seria una inclusió d'una llibreria per a les funcions bàsiques com les d'entrada i sortida. Normalment s'inclouen amb crides com #include <stdio.h> [stdio referint-se a la llibreria d'entrada i sortida estàndard]. Aquesta instrucció és una derivada d'allò, demanant si es pot obtenir la llibreria, obtenint-la si és possible, i llançant una excepció si no ho és. Es posa principalment per autenticitat — de fet, en les implementacions actuals de LOLCODE s'ignora. VISIBLE [message] Imprimeix un missatge per pantalla. GIMMEH [var] Mostra una variable com una cadena de text. I HAS A [var] Defineix una nova variable. Per defecte aquesta té valor nul, però se li pot assignar afegint a darrere ITZ [value], ITZ A [type] o ITZ LIEK A [var]. [var] R [value] Assigna un valor a una variable. BOTH SAEM [expr] AN [expr] Compara dues expressions. Retorna WIN si són iguals i FAIL si són diferents. El mètode contrari de BOTH SAEM és DIFFRINT. BIGGR OF [expr] AN [expr] Obté l'expressió més gran. Per obtenir la més petita s'utilitza SMALLR. SUM OF [expr] AN [expr] Obté la suma de dues expressions. De manera similar, DIFF obté la resta, PRODUKT el producte, QUOSHUNT el quocient i MOD el mòdul. MAEK [expr] A [type] Transforma una expressió a un tipus concret. Si l'expressió és una variable aquesta no canvia, excepte utilitzant [var] R MAEK [var] A [type] o bé de forma equivalent [var] IS NOW A [type]. SRS [var] Interpreta una variable de text com un identificador. [expr], O RLY? YA RLY [code] NO WAI [code] OIC Condicional de tipus 'if', si es compleix s'executa el codi dins de YA RLY, si no el de NO WAI. [expr], WTF? OMG [value] [code] OMG [value] [code] OMGWTF [code] OIC Condicional de tipus 'case'. IM IN YR [label] [code] IM OUTTA YR [label] Bucle infinit. A la primera línia s'hi pot incloure una variable comptador fins a cert màxim, afegint-hi UPPIN|NERFIN YR [var] (UPPIN per incrementar i NERFIN per reduir) i/o una condició de tipus until o while amb TIL|WILE [expr] (TIL sent l'equivalent a until i WILE a while). KTHXBYE HAI introdueix el programa, per tant, KTHXBYE (que significa "Okay Thanks, Bye") el finalitza.

### Funcions

Les funcions són declarades de la següent manera:
La funció pot retornar un valor concret fent servir FOUND YR [expression] o bé un valor nul amb GTFO.
Per executar la funció es fa amb:
Si els arguments són expressions, s'evaluen abans d'executar la funció.

### Tipus de variables

       Codi Comentari NOOB Variable no definida. TROOF Variable booleana, pot ser WIN (true) o FAIL (false). NUMBR Nombre enter. Pot ser positiu o negatiu. NUMBAR Nombre amb decimals. YARN Cadena de caràcters. BUKKIT Llista d'elements.
YARN és indicada entre cometes ("). Tots els caràcters de la cadena representen el seu propi valor excepte :, que és el caràcter d'escapament. :) és el salt de línia, :> és una tabulació, :" permet incloure les cometes i :: els dos punts, :([hex]) mostra un caràcter indicat amb codi hexadecimal, :{[var]} permet inserir el valor actual d'una variable a la cadena, i :[[char name]] obté una lletra a partir del seu nom normatiu Unicode.
La següent funció interna permet concatenar diferents YARN:
BUKKIT es pot definir de dues maneres:

## Exemples

Els següents programes són un programa Hola Món! i un programa simple per imprimir un fitxer per pantalla. El Houston Chronicle va publicar-ne un codi semblant.

### Exemple 2

En aquest exemple, s'introdueixen les instruccions per a obrir un fitxer(PLZ OPEN FILE "NAME"? — "Please try to open a file?"), i tractament d'errors (AWSUM THX — "Awesome, thanks!", i O NOES — "Oh no!").
Altres comandes inclouen I HAS A variable per a declarar variables, variable R valor ("variable [és/està/sent] value") per a tal d'assignar valors a les variables, enviant errors per la sortida amb INVISIBLE en comptes de VISIBLE, i BTW ("by the way") per a anotar comentaris, fent que l'analitzador sintàctic ignori la resta de la línia. Els bucles es creen amb IM IN YR etiqueta (del meme d'internet "I'm in your ___"), i acaben amb IM OUTTA YR etiqueta. Els bucles no tenen comptadors ni condicions, i, per tant, no acaben intrínsecament. Els bucles també es poden acabar amb la comanda condicional IZ:

### Exemple 3

Aquest simple programa imprimeix per pantalla els nombres de l'1 al 10 i acaba (amb l'especificació 1.0). El mateix programa amb l'especificació 1.2 (assumint que VAR comença a 0):

## Implementacions

La primera implementació LOLCODE va ser un analitzador sintàctic PHP escrit per Jeff Jones. La web de l'analitzador sintàctic també va ser la primera web usant LOLCODE com a llenguatge de scripts. Com que és codi lliure amb una llicència d'estil BSD, s'ha bifurcat i usat en diverses webs per a implementar scripts LOLCODE. La presentació Pecha Kucha guanyadora a l'edició del 2008 de PHP Works era sobre aquest analitzador.
Hi ha un compilar .NET per a LOLCODE escrit per Nick Johnson, i que va tenir un article en els seminaris d'entrenament de desenvolupadors de Microsoft, la Conferència TechEd de 2007 (Austràlia).
PL/LOLCODE, un projecte dirigit per Josh Tolley, fa que el LOLCODE estigui disponible com a llenguatge de programació des d'un servidor dins de PostgreSQL.
El Dynamic Language Runtime de Microsoft té una implementació de LOLCODE per a fins experimentals.
També hi ha disponible un interpretador JavaScript.
També hi ha un compilador LOLCODE inclòs amb la màquina virtual Parrot com un dels llenguatges demostrant l'ús de les eines de compilació del Parrot.
Existeix un interpretador de baix nivell escrit en C, mantingut per Justin J. Meza, per a proveir d'interpretació LOLCODE en diverses plataformes.

## Projectes relacionats

LOLCODE també ha inspirat LOLPython, escrit per Andrew Dalke. LOLPython usa una sintaxi inspirada en Lolcats similar a la del LOLCODE, però amb estil semblant al Python. Funciona traduint la font Python en codi Python.

## Referències

* 1 2 Dwight Silverman. «I'm in ur newspaper writin mah colum». Chron.com, 06-06-2007. [Consulta: 6 juny 2007].
* ↑ Hammock, Anne «The new fame: Internet celebrity». CNN, 01-05-2008.
* ↑ Arachnid. «Proof that LOLCode is turing complete:BrainF*** interpreter in LOLCode». forum.lolcode.com. Arxivat de l'original el 2007-07-11. [Consulta: 5 octubre 2008].
* ↑ «keywords:can-has · LOLCODE». Arxivat de l'original el 2008-02-06. [Consulta: 10 febrer 2008].
* 1 2 Adam Lindsay. «" LOLCODE main page». lolcode.com, 25-05-2007. [Consulta: 2 octubre 2007].
* ↑ «First Parser Comment». Lindsay.at. Arxivat de l'original el 2009-05-19. [Consulta: 9 juny 2009].
* ↑ «Tetraboy's LOLCODE parser». Tetraboy.com. Arxivat de l'original el 2009-02-27. [Consulta: 9 juny 2009].
* ↑ «"The Best Web Language: LOLCODE" Slides». Slideshare.net. [Consulta: 9 juny 2009].
* ↑ PHP Works
* ↑ LOLCODE .NET compiler Arxivat 2016-03-10 a Wayback Machine. at Google Code
* ↑ TechEd Day 2: Microsoft announces LOLCode support, Long Zheng
* ↑ LOLcode in next Visual Studio? For young and funny cats Arxivat 2013-10-23 a Wayback Machine., NetworkWorld.com
* ↑ «Video of LOLCODE presentation at TechEd 2007». Blip.tv, 17-08-2007. Arxivat de l'original el 2009-02-05. [Consulta: 9 juny 2009].
* ↑ PL/LOLCODE Arxivat 2010-11-28 a Wayback Machine., pgFoundry
* ↑ Deep DLR, John Lam and Martin Maly
* ↑ «LolCode». Fullvolume.co.uk. [Consulta: 9 juny 2009].
* ↑ «Lightning-Parrot». lolcode.com. Arxivat de l'original el 2009-03-22. [Consulta: 20 juny 2009].
* ↑ http://www.icanhaslolcode.org/ Arxivat 2011-07-18 a Wayback Machine. I Can Has lolcode? - an efficient LOLCODE interpreter written in C.
* ↑ «LOLPython». Dalkescientific.com, 01-06-2007. [Consulta: 9 juny 2009].

## Enllaços externs

* Web Oficial de LOLCODE Arxivat 2013-03-04 a Wayback Machine.