(2018.7.10. 公開)
「字句」とは見慣れない言葉だが、プログラミング言語で「一定の意味を持つ文字の並びの最小単位」を表す。大まかに言えば「単語」に近いが、下に説明するように、もう少し広い意味を持つ。
「名前」は、アルファベット・数字・アンダーバーを1つ以上組み合わせた文字列である。ただし、先頭の文字は半角数字であってはいけない。「名前」は、変数名・関数名・テーブルのフィールド名・goto ラベルなどに用いられる。
以下の名前は、「予約語」である。これらは、Lua/LuaJIT 言語での役割が決まっているため、その他の目的で使うことはできない。
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
Lua/LuaJIT では、大文字と小文字は区別される。and
は予約語だが、And
, AND
, aNd
などは予約語ではなく、通常の名前として使うことができる(紛らわしいのでお勧めはしない)。また、半角文字と全角文字も区別される。予約語はすべて半角文字である。
Lua/LuaJIT では、名前を構成する「アルファベット」として、半角の英文字だけでなく、記号・数字でない任意の文字を使うことができる。ひらがな・カタカナ・漢字などを名前として使ってもよい。
以下の記号、または記号の並びは、それぞれ1つの字句である。
+ - * / % ^ #
== ~= <= >= < > =
( ) { } [ ]
; : , . .. ...
数値定数は、数字を並べたものである。途中に小数点が1個あってもよい。また、末尾に e
または E
に続けて符号のつかない整数値または負の整数値を書いてもよい。この「e◯◯
またはE◯◯
(◯◯は符号のつかない整数または負の整数)」記法は、その前の数値を「10の◯◯乗」倍することを示す。
1.53e4 = 1.53×104 = 15300
16進数の数値定数は、0x
または 0X
に16進数の数字(0-9
の数字と a-f
または A-F
の英字)を並べたものである。途中に小数点が1個あってもよい(16進数の小数が使われることは稀だが)。
0x4a = 74
0x4a.3f = 74.24609375 (= 74 + 3/16 + 15/256)
数値定数に含まれる文字は、すべて半角文字である。
文字列定数は、シングルクォート '
またはダブルクォート "
で囲まれた文字の並びである。先頭と同じ種類のクォート、改行、バックスラッシュ \
、およびゼロ文字(文字コード 0 で表される文字)以外は任意の文字を入れることができる。
シングル(またはダブル)クォートで囲まれた文字列定数の中にバックスラッシュ \
があると、それは「エスケープシーケンス」の始まりを示す。エスケープシーケンスには、次のものがある。
シーケンス | 表す文字 | 文字コード |
\a | ベル | 7 |
\b | バックスペース | 8 |
\f | 改ページ | 12 |
\n | 改行 | 10 |
\r | 復帰 | 13 |
\t | 水平タブ | 9 |
\v | 垂直タブ | 11 |
\\ | バックスラッシュ(または円記号) | 92 |
\" | 引用符(ダブルクォート) | 34 |
\' | アポストロフィ(シングルクォート) | 39 |
\改行 | 改行 | 10 |
\ddd | 任意の8ビット文字 (dddは最大3桁の10進数)(*) | ddd |
(*) C言語では \ddd
の数値エスケープシーケンスは8進数で表すが、Lua/LuaJIT では10進数で表す。
複数行にまたがる文字列定数を、「長カッコ」を使って書くことができる。「開く長カッコ」は、2つの[
の間に0個以上の =
を置いたものであり、「閉じる長カッコ」は、2つの ]
の間に開く長かっこと同数の =
を置いたものである。たとえば、「0段の長カッコ」は [[
〜]]
であり、「1段の長カッコ」は [=[
〜]=]
である。長カッコの間には、ゼロ文字と「閉じる長カッコ」以外の任意の文字を含めることができる。改行を含めてもよい。
特例として、「開く長カッコ」の直後にある改行文字は、無視される。したがって、次の (1)(2) は同じ内容の文字列定数となる。
(1) [[一行目
二行目]]
(2) [[
一行目
二行目]]
なお、同じ内容の文字列定数をシングル(またはダブル)クォートとエスケープシーケンスを使って書くこともできる。
(3) "一行目\n二行目"
(4) "一行目\10二行目"
(5) "一行目\
二行目"
コメントは、--
で始める。--
の直後に「開く長カッコ」があれば、対応する「閉じる長カッコ」までがコメントとなる。「開く長カッコ」がない場合は、行末までがコメントとなる。プログラムの実行の際には、コメントはすべて読み飛ばされる。
コメントは、プログラムを作成した人の「意図」を書き残しておくために役に立つ。
Lua/LuaJIT では、空白文字(半角スペース、タブ文字、改行)は構文上の意味を持っていない。つまり、空白は必要なときに好きなだけ書いてよい。この規則の例外となるのは、次の場合である。
文字列定数の中では、空白文字は書かれた通りの意味を持つ(つまり、空白文字1個の" "
と空白文字2個の " "
は異なる文字列である)。また、文字列定数・コメントの中での改行文字の解釈については、2-4, 2-5, 2-6 ですでに説明した。
2つの字句を続けて書くと別の字句と見なされる場合、それらを1個以上の空白文字で区切る必要がある。
2<xandx<8 -- 'xandx' という名前になってしまう
2<x and x<8 -- 空白を入れる
2 < x and x < 8 -- もちろんこれでもよい
(2<x)and(x<8) -- こう書くのもあり
関数呼び出し(後述)の関数名
と(引数リスト)
の間には、改行を入れてはいけない。
print(x, y) -- x, y を表示する
print
(x, y) -- こう書いてはいけない
目次