仕様と範囲

構文木・値・ASTを区別する。

文法v0.3ではparseと評価は別の操作です。parse結果は構文を保持するMatraModuleであり、単一の文書nodeや評価済みASTではありません。

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

01 / PARSE

parseはsource全体を読む

parse(source)はsource全体を解析し、宣言・式を保持するMatraModuleを返します。単一root nodeを要求せず、構文エラー時に部分結果を成功値として返しません。構文木と評価済み文書valueは別の段階です。

const module = parse(source)
// module is syntax, not the evaluated document AST

02 / STATIC

evaluateStaticは静的に分かる値だけ

literal、array、object、先行する静的let、およびそれらのみからなるnodeや静的arrayのchild展開は静的に取得できます。未解決reference、member、call、operator、制御式、代入など、実行が必要な式では静的取得エラーになります。暗黙に実行へ切り替わりません。

const value = evaluateStatic(module)

03 / EVALUATE

実行はevaluateで明示する

動的な式の値が必要な場合はevaluate(module)を明示して使います。これによりparseが実行と混同されず、静的取得も安全なfallbackとして振る舞います。信頼できないsourceを安全に実行するsandboxを意味するものではありません。

const result = evaluate(module)
const ast = staticValueToAST(result)

04 / AST

AST変換は評価値から

文書rendererに渡すobject形式ASTは、評価済みvalueをstaticValueToAST()で変換して得ます。MatraModule、runtime value、document ASTは異なる役割です。旧Parser v0.2のsyntaxMode契約は現行v0.3に適用しません。

区別すること

このページは概要です。

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

一次資料