fluorite12

括弧 (value)

括弧 ( ) は任意の式を内部に含めることができる、何も行わない因子です。

括弧は計算順序の変更などに使うことができます。

$ flc '(1 + 2) * 10'
# 30

括弧内には、実際には複文を書くことができます。

以下のサンプルコードでは、変数 a を0で初期化して、括弧内で a に100を代入し、括弧自体は a + 20 である120を返します。括弧の値は3と和を取られ、結果、プログラムの出力は123になります。

fluorite12では、多くのプログラミング言語とは異なり、複文に { } を使うことはできません。

$ flc '
  a := 0
  (
    a = 100
    a + 20
  ) + 3
'
# 123

括弧の内側で宣言された変数は、括弧外に影響を及ぼしません。

$ flc '
  a := 10
  (
    a := 20
    OUT << a
    a = 30
    OUT << a
  )
  a
'
# 20
# 30
# 10

ルートノード

ルートノードではファイル全体や括弧の直下など、どんな式でも書ける場所のルールを定義します。

複文 runner; ...; getter

複文は、0個以上の文と複文自体の値となる末尾式を ; で区切って繋いだものです。

以下のサンプルコードにおいて、最後の a の行のみが式(getter)扱いで、その上の3行は文(runner)扱いです。

以下のサンプルコードでは、変数 a を宣言しつつ10を代入し、10が格納されている a の値を出力、次に a に20を代入し、末尾式として20の格納されている a を指定しています。

$ flc '
  a := 10;
  OUT << a;
  a = 20;
  a
'
# 10
# 20

末尾式は省略することができます。

その場合、文が末尾式でないことを示すために、末尾に ; が必要となる場合があります。

末尾式が省略された複文の値は常に NULL となります。

$ flc '1 + 2;'
# NULL

$ flc ''
# NULL

複文内での ; の記述は、末尾を除いて柔軟です。

項の前や中間に ; を余計に多く書いても問題ありません。

末尾式の後にはセミコロンを書くことはできません。

また、改行は ; の代わりになります。

$ flc '
  a := 10
  OUT << a
  ; ; ; a = 20; ; ;
  a
'
# 10
# 20