Lua の基本の式は次のとおりです。

      exp ::= prefixexp
      exp ::= nil | null | false | true
      exp ::= Number
      exp ::= String
      exp ::= function
      exp ::= tableconstructor
      exp ::= `...´
      exp ::= exp binop exp
      exp ::= unop exp
      prefixexp ::= var | functioncall | `(´ exp `)´

数値とリテラル・ストリングについては『字句の規則』で説明しました。変数については『変数』で説明しました。関数定義については『関数定義』で説明します。関数呼び出しについては『関数呼び出し』で説明します。表コンストラクターについては『表コンストラクター』で説明します。3 つのドット (「...」) で表される可変引数式は、可変引数関数の中で直接使用できるのみです。これについては『関数定義』に説明しています。

2 項演算子には、算術演算子 (『算術演算子』を参照)、関係演算子 (『関係演算子』を参照)、論理演算子 (『論理演算子』を参照)、および連結演算子(『連結』を参照) があります。単項演算子には、単項マイナス (『算術演算子』を参照)、単項 not (『論理演算子』を参照)、および単項長さ演算子 (『長さ演算子』を参照) があります。

関数呼び出しと可変引数式の両方とも、結果は複数の値にすることができます。式がステートメントとして使用された場合 (これは関数呼び出しに対してのみ可能、『優先順位』を参照)、その戻りリストはゼロ個のエレメントに調整され、そのため、すべての戻り値は破棄されます。式が、式リストの最後 (または唯一) のエレメントとして使用された場合、(呼び出しが括弧で囲まれた場合を除いて) 調整は行われません。他のすべてのコンテキストで Lua は、 最初の値以外のすべてを破棄して、結果リストを 1 つのエレメントに調整します。

以下にいくつかの例を示します。

     f()                -- adjusted to 0 results
     g(f(), x)          -- f() is adjusted to 1 result
     g(x, f())          -- g gets x plus all results from f()
     a,b,c = f(), x     -- f() is adjusted to 1 result (c gets null)
     a,b = ...          -- a gets the first vararg parameter, b gets
                        -- the second (both a and b can get null if there
                        -- is no corresponding vararg parameter)
     a,b,c = x, f()     -- f() is adjusted to 2 results
     a,b,c = f()        -- f() is adjusted to 3 results
     return f()         -- returns all results from f()
     return ...         -- returns all received vararg parameters
     return x,y,f()     -- returns x, y, and all results from f()
     {f()}              -- creates a list with all results from f()
     {...}              -- creates a list with all vararg parameters
     {f(), null}         -- f() is adjusted to 1 result

括弧で囲まれた式は常にただ 1 つの値の結果になります。したがって、たとえ f が複数の値を返しても、(f(x,y,z)) は常に単一値です。((f(x,y,z)) の値は、f が返す最初の値であるか、f が値を返さない場合は null です。)