Convenciones léxicas

Los nombres (también llamados identificadores) en Lua pueden ser cualquier cadena de letras, dígitos y guiones bajos, que no empiecen por un dígito. Esto coincide con la definición de los nombres en la mayoría de las lenguas. (La definición de letra depende de la localización actual: cualquier carácter considerado alfabético por la localización actual puede utilizarse en un identificador) Los identificadores se utilizan para nombrar variables y campos de tabla.

Las siguientes palabras clave están reservadas y no pueden utilizarse como nombres:

and	break	do      else       elseif	
end	false	for     function   if       or
in	 local	nil     not        null	
repeat    return     then    true       until    while

Lua es un lenguaje que distingue entre mayúsculas y minúsculas: ' and es una palabra reservada, pero ' And y ' AND ' son dos nombres válidos diferentes. Como convención, los nombres que comienzan con un guión bajo seguido de mayúsculas (como ' _VERSION) están reservados para las variables globales internas usadas por Lua.

Las siguientes cadenas denotan otros tokens:


+	-	*	/	%	^	#	<>	!=
==     ~=      <=      >=     <	>	 =		
(	)	{	}	[	]	||	…	
;	:	,	.	->	..			
Las cadenas literales pueden delimitarse mediante comillas simples o dobles coincidentes, y pueden contener las siguientes secuencias de escape de tipo C:
  • \a' (campana)
  • '\b' (retroceso)
  • \f' (alimentación de formularios)
  • \n' (nueva línea)
  • \r' (retorno de carro)
  • \t" (pestaña horizontal)
  • \v' (pestaña vertical)
  • '\\' (barra invertida)
  • \"" (comillas [doble comilla])
  • \'' (apóstrofe [comilla simple])

Además, una barra invertida seguida de una nueva línea real da como resultado una nueva línea en la cadena. Un carácter de una cadena también puede especificarse por su valor numérico mediante la secuencia de escape \ddd, donde ddd es una secuencia de hasta tres dígitos decimales. (Tenga en cuenta que si un escape numérico debe ir seguido de un dígito, debe expresarse utilizando exactamente tres dígitos)

Las cadenas en Lua pueden contener cualquier valor de 8 bits, incluyendo ceros incrustados, que pueden especificarse como '\0'. Las cadenas literales también pueden definirse utilizando un formato largo encerrado entre corchetes largos.

Un corchete largo de apertura de nivel n se define como un corchete cuadrado de apertura seguido de n signos iguales seguidos de otro corchete cuadrado de apertura. Así, un corchete largo de apertura de nivel 0 se escribe como [[, un corchete largo de apertura de nivel 1 se escribe como [=[, y así sucesivamente. Un corchete largo de cierre se define de forma similar; por ejemplo, un corchete largo de cierre de nivel 4 se escribe como ]====]. Una cadena larga comienza con un corchete largo de apertura de cualquier nivel y termina en el primer corchete largo de cierre del mismo nivel. Los literales en esta forma de corchetes pueden abarcar varias líneas, no interpretan ninguna secuencia de escape e ignoran los corchetes largos de cualquier otro nivel. Pueden contener cualquier cosa excepto un corchete de cierre del nivel adecuado.

str1 = "this is a string"
str2 = 'this is also a string'

str3 = [[this string uses level 0 long brackets]] str4 = [=[this string uses level 1 long brackets]=] str5 = [==[this string uses level 2 long brackets]==]
Por comodidad, cuando el corchete largo de apertura va seguido inmediatamente de una nueva línea, ésta no se incluye en la cadena. Por ejemplo, en un sistema que utilice ASCII (en el que "a" se codifica como 97, la nueva línea se codifica como 10 y "1" se codifica como 49), las cinco cadenas literales siguientes denotan la misma cadena:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo

123"]==]

Una constante numérica puede escribirse con una parte decimal opcional y un exponente decimal opcional. Lua también acepta constantes hexadecimales enteras, anteponiéndoles el prefijo ' 0x. Ejemplos de constantes numéricas válidas son:

3	3.0	3.1416	314.16e-2	0.31416E1	0xff	0x56

Un comentario comienza con un guión doble (--) en cualquier lugar fuera de una cadena. Si el texto inmediatamente después de -- no es un corchete largo de apertura, el comentario es un comentario corto, que se extiende hasta el final de la línea. De lo contrario, se trata de un comentario largo, que se extiende hasta el corchete largo de cierre correspondiente. Los comentarios largos se utilizan con frecuencia para desactivar temporalmente el código. Los comentarios largos utilizan la misma forma de corchetes que las cadenas largas. Un comentario largo de nivel 0 comienza con --[[ y termina con ]]. Un comentario largo de nivel 1 comienza con --[=[ y termina con ]=], etc.

-- This is a short comment

--[[
This is a long comment
]]

--[=[
This long comment uses level 1 brackets
]=]