括弧 (value)#
括弧 ( ) は任意の式を内部に含めることができる、何も行わない因子です。
括弧は計算順序の変更などに使うことができます。
$ xa '(1 + 2) * 10'
# 30
括弧内には、実際には複文を書くことができます。
以下のサンプルコードでは、変数 a を0で初期化して、括弧内で a に100を代入し、括弧自体は a + 20 である120を返します。括弧の値は3と和を取られ、結果、プログラムの出力は123になります。
Xarpiteでは、多くのプログラミング言語とは異なり、複文に { } を使うことはできません。
$ xa '
a := 0
(
a = 100
a + 20
) + 3
'
# 123
括弧の内側で宣言された変数は、括弧外に影響を及ぼしません。
$ xa '
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 を指定しています。
$ xa '
a := 10;
OUT << a;
a = 20;
a
'
# 10
# 20
末尾式は省略することができます。
その場合、文が末尾式でないことを示すために、末尾に ; が必要となる場合があります。
末尾式が省略された複文の値は常に NULL となります。
$ xa '1 + 2;'
# NULL
$ xa ''
# NULL
複文内での ; の記述は、末尾を除いて柔軟です。
項の前や中間に ; を余計に多く書いても問題ありません。
末尾式の後にはセミコロンを書くことはできません。
また、改行は ; の代わりになります。
$ xa '
a := 10
OUT << a
; ; ; a = 20; ; ;
a
'
# 10
# 20