字句の規則

Luaにおける名前(識別子とも呼ばれる)は、文字、数字、アンダースコアからなる文字列で、数字で始まらないものであれば何でもよい。 これは、ほとんどの言語の名前の定義と一致します。 (文字の定義は現在のロケールによって決まります。現在のロケールで英字とされているすべての文字を ID の中で使用できます。) ID は、変数および表フィールドに名前を付けるときに使用されます。

以下のキーワード は予約済みで、名前として使用できません。

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

Lua は大文字小文字を区別する言語です。and は予約語ですが、AndAND は、2 つの異なる有効な名前になります。 慣例として、アンダースコアで始まり大文字が続く名前('_VERSIONなど)は、Luaが使用する内部グローバル変数用に予約されています。

以下のストリングは、その他のトークンを表します。


+	-	*	/	%	^	#	<>	!=
==     ~=      <=      >=     <	>	 =		
(	)	{	}	[	]	||	…	
;	:	,	.	->	..			
リテラル文字列は一重引用符または二重引用符で区切ることができ、以下のCライクなエスケープ・シーケンスを含むことができる:
  • '〘バックスペース'
  • フォームフィード
  • 改行
  • キャリッジリターン
  • 横タブ
  • 縦タブ
  • '(バックスラッシュ)
  • '(クォーテーションマーク[二重引用符])
  • '(アポストロフィ[一重引用符])

さらに、バックスラッシュの後に実際の新規行が続くと、ストリングの中で新規行になります。 文字列中の文字は、エスケープシーケンスを使って数値で指定することもできる。 (数値エスケープは、後に数字が続く場合は、 正確に 3 桁を使用して表す必要があることに注意してください。)

Luaの文字列は、埋め込まれたゼロを含む任意の8ビット値を含むことができ、その値は「'˶0'」と指定することができます。 リテラル文字列は、長い括弧で囲まれた長い書式を使って定義することもできる。

レベルnの開始長括弧は、開始角括弧の後にn個の等号が続き、さらに開始角括弧が続くものとして定義される。 つまり、レベル0の開き長括弧は[[]、レベル1の開き長括弧は[=[]、と書く。 閉じ長括弧も同様に定義される。例えば、レベル4の閉じ長括弧は ]====] と記述される。長い文字列は、任意のレベルの開始長括弧で始まり、同じレベルの最初の終了長括弧で終わります。 この角括弧形式のリテラルは、複数の行で使用でき、どのエスケープ・シーケンスも解釈せず、他のどのレベルの長い角括弧も無視します。 対応するレベルの角括弧閉じ以外なら何でも含めることができます。

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]==]
利便性のために、長い角括弧開きの直後に改行文字が続く場合、その改行文字はストリングの中に含められません。 例として、ASCII('a'は97、改行は10、'1'は49としてコード化される)を使用するシステムでは、以下の5つのリテラル文字列は同じ文字列を表す:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo

123"]==]

数値定数 は、任意指定の小数部と、任意指定の 10 進指数を使用して記述できます。 Lua では、前に 0x が付いた、整数 16 進定数も受け入れます。 有効な数値定数の例は以下の通り:

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

コメントは、文字列の外側のどこでもダブルハイフン(--)で始まる。 の直後のテキストが長い括弧でない場合、そのコメントは行末まで続く短いコメントとなる。 そうでない場合は長いコメントとなり、対応する閉じの長い括弧まで続く。 長いコメントは、 コードを一時的に無効にするためによく使用されます。 長いコメントは長いストリングに対して使用されるのと同じ 角括弧の形式を使用します。 レベル 0 の長いコメントは、--[[ で始まり、]] で終ります。 レベル 1 の長いコメントは、--[=[ で始まり、]=] で終るというようになります。

-- This is a short comment

--[[
This is a long comment
]]

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