Chain Language

Chain is serial data description language.

Use

  • cui
  • argument parser
  • inter-application communication
  • serialize for non nest data

データ型

Flag(二値型)

true or false の 二値 を扱う型.

Variety(多値型)

true or false を含む 1つの 多値 を扱う型.

VarietyEnumeration(多値列挙型)

複数の 多値型 を扱う型.

構文

Example - xxx ---a A AA AAA --b B -c true

xxx, ---a 'A' 'AA' 'AAA', --b 'B', -c true はそれぞれ Chain Element という.
chain 文の開始にある hyphen で始まらない Chain Element は Head といい ここでは xxx である.
---a 'A' 'AA' 'AAA', --b 'B', -c true はそれぞれ Body という.
---a 'A' 'AA' 'AAA' という 3つの hyphen で始まる Body を VarietyEnumeration という.
--b 'B' という 2つの hyphen で始まる Body を Variety という.
-c true という 1つの hyphen で始まる Body を Flag という.

---aa, --bb, -cc, はそれぞれ名前を表す.
Head は必ず名前のみを持ち, 値を持たない.
Body は必ず名前を持ち, そのすぐ後ろに値を記述し 紐づけることができる.
Flag は 二値型 を, Variety は 多値型を, VarietyEnumeration は多値列挙型を, それぞれ紐づけることができる.

xxx, a, b, c, のように 1つの chain 文に存在する Chain Element の名前はすべて一意でなければならない.

区切り文字(Delimiter)は 1つ以上の連続する space である.
そのほかの white space である 改行 や tab は区切り文字として無効である.

Example - ---a A AA AAA

Head は省略可能である.

Example - ---a A 'A A' '' "" --b "A B C"

多値型を記述する際 space が値の中に含まれる場合 single quotation もしくは double quotation で囲むことができる.
また何も囲まないことで空文字の表現ができる.
a は A, A A, 空文字, 空文字, の計4つの値が紐づけられている.

Example - ---a 'A\'A' "B\"B"

, でエスケープが可能.
A'A, B"B, の値が紐づけられた a という名前の VarietyEnumeration.

Example - ---a 'A"A' "A'A"

異なる quotation にすれば エスケープ処理も不要.
A"A, A'A, の値が紐づけられた a という名前の VarietyEnumeration.

Example - '' ---a A AA AAA

この chain 文は無効.
空文字を Head にすることはできない.

Example - --b B -c true ---a A AA AAA -d false ---e E --f F

VarietyEnumeration, Variety, Flag, の配置順序に決まりはない.
また Head とは異なり それぞれ定義できる個数に制限はない.
ここでは下記の Chain Element が存在する.
A, AA, AAA, の値が紐づけられた a という名前の VarietyEnumeration.
B, の値が紐づけられた b という名前の Variety.
true, の値が紐づけられた c という名前の Flag.
false, の値が紐づけられた d という名前の Flag.
E, の値が紐づけられた e という名前の VarietyEnumeration.
F, の値が紐づけられた f という名前の Variety.

Example - ---a --b -c

VarietyEnumeration, Variety, Flag, は同様に紐づける値を省略することができる.
VarietyEnumeration の場合 空のリスト が紐づけられたものとして扱われる.
Variety, Flag, においては何も値が紐づけられていないものとして扱われる.

Example - ---a \-A --b \-\-\-\-AAAA

hyphen で開始する値を紐づけたい場合 \ で - をエスケープすることで値として扱われる.
-A, の値が紐づけられた a という名前の VarietyEnumeration.
----AAAA, の値が紐づけられた b という名前の Variety.

Example - ---a A AA

区切り文字の space は複数連続しても有効.
A, AA, の値が紐づけられた a という名前の VarietyEnumeration.

Libraries

bpriver_chain