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.
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:
+ - * / % ^ # <> !=
== ~= <= >= < > =
( ) { } [ ] || …
; : , . -> ..
- \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]==]
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
]=]