Luaはバッカス・ナウア記法(シンボル = シンボル or 式)で記される。
識別子(変数や関数、テーブルなどの名前)はアルファベットと数字とアンダースコアから構成される。最初の文字に数字は使えない。空白か後=のようなシンボルで区切られる。
予約語
and break do else elseif end
false for function goto if in
local nil not or repeat return
then true until while
区切りの意味を持つシンボル
+ - * / % ^ #
& ~ | << >> //
== ~= <= >= < > =
( ) { } [ ] ::
; : , . .. ...
文字列定義とエスケープシーケンス
文字列はシングルクォート、あるいはダブルクォートでくくることで表現される。文字列中、バックスラッシュに続けて特定の文字を並べることで別の意味を持つ。
_bell = '\a'
_backspace = '\b'
_form_feed = '\f'
_newline = '\n'
_carrige_return = '\r'
_horizontal_tab = '\t'
_vertical_tab = '\v'
_backslash = '\\'
_quatation_mark_double_quote = '\"'
_quatation_mark_single_quote = '\''
バックスラッシュに続く改行は、改行文字を表す。つまり区切りとして認識されずそのまま改行文字になるため、スクリプト中で複数行にわたって文字列を表す場合に使える。
\zに続くホワイトスペースの塊は無視される。
str = "---\
Hello\z World\
---"
print(str)
--=> ---
--=> HelloWorld!
--=> ---
バックスラッシュ+”x”+16進数2桁、あるいはバックスラッシュ+10進数3桁でバイトを表現することもできる。区別するため10進数の場合必ず3桁でないとだめ。
UTF-8の文字列も記述でき、その場合バックスラッシュ+”u{“+16進数表現+”}” という形で表す。波カッコは必須。
print("\x2f", "\047", "\x2f" == "\047") --=> / / true
文字列は、角カッコで括って書くこともできる。角カッコは2つ重ねるが、その間にN個のイコールを挟んでもよい(その場合「レベルNの長いブラケット」と呼ばれる)。
_str0 = [["This is a string in level-0 long brackets"]]
_str1 = [=['This is a string in level-1 long brackets']=]
_str2 = [==[ This is a string in level-2 long brackets ]==]
print(_str0) --=> "This is a string in level-0 long brackets"
print(_str1) --=> 'This is a string in level-1 long brackets'
print(_str2) --=> This is a string in level-2 long brackets
数字の定義は指数表現、16進数表現も可。10進数の場合 e または E で10のべき乗を、16進数の場合 p または P で2のべき乗を表せる。
print(3.14e3) --=> 3.14 * 10^3 = 3140.0
print(0x100p8) --=> 256 * 2^8 = 65536.0
コメント
ハイフン2つがコメント。ハイフン2つの直後に角カッコ開が2つ続く場合、2つ連続の角カッコ閉までがコメントとして扱われる。そうでない場合は行末までコメントとして扱われる。
_var = "val" -- This is a simple comment sentecne
_var = "val" --[[
This is also a simple comment sentence
]]