仕様と範囲

現行source文法。

文法v0.3は一般のMatra sourceの構文とparse・評価の契約を定義します。旧Core v0.2の構文との互換性は保証されません。ここでは主要な形を説明し、完全な規則・診断・共通fixtureは一次資料に委ねます。

仕様v0.3、個別npm package version、compiler ABIは別々に管理されます。

01 / PROGRAM

文と区切り

sourceは宣言や式からなる文の並びです。文は改行またはsemicolonで区切り、閉じbraceやsource末尾の直前では区切りを省略できます。括弧内では改行できますが、括弧外で式を次行へ継続する一般規則はありません。

let title = "Hello"
fn label(value) {
  strong { value }
}

02 / NODE

式と文書node

関数・constructor callは任意のvalueを返す式です。文書nodeはtagの後にclass shorthand、括弧内の属性を置き、本文braceでchildを構築します。属性は完全な式を値にでき、同じkeyは後の値で上書きされます。

article.card#intro(title="Welcome") {
  h1 { "Hello" }
  p { "A Matra document." }
}

03 / CONTROL

制御式とchild展開

if/else_if/else、for、while、do-untilを使えます。ifは選択したblockの値、forは各反復blockの値のlistを返します。node本文の各式はchildを1つ追加し、...expressionはarrayを一段だけ展開します。nullも値モデル上は保持されます。

let rows = for (item in ["one", "two"]) {
  li { item }
}
ul { ...rows }

04 / MARKUP

XML-style markup

文書profileではXML-style markupを式として書けます。属性値は引用符付きstringで、本文textと子要素は保持され、標準文字参照は復号されます。Matra式の本文補間は行いません。完全なXML/HTML互換ではなく、終了tagや不正属性などは厳密に拒否します。

<img src="image.png" />
<p>Hello <strong>Matra</strong>!</p>

05 / EXPRESSION

式・scope・適用範囲

literal、reference、array/object、member access、call、単項・二項演算、制御式が使えます。blockはlexical scopeを持ち、関数は宣言時scopeを捕捉します。v0.3の文書profileにはmodule import、型推論、複数行string、一般的な後置block call、括弧外の改行継続は含まれません。

区別すること

このページは概要です。

このページは要約です。規範的な定義、全API契約、検証fixtureはリンク先のMatra仕様書を参照してください。

一次資料