Posted at

Tao3Dの基幹にある謎の言語XLRに迫る

More than 3 years have passed since last update.

Tao3Dは、インタラクティブなスライドやアニメーションが作成できるプログラミング言語および開発プラットフォームで、Windows版, OS X版, Linux版のパッケージが用意されています。今年、Tao3D Libre Editionが公開され、日本でも報道されました

Tao3Dの使い方を、ブログに少し書きました。 Tao3Dで検索 - M59のブログ


XLR

Tao3Dは一種のDSL(domain-specific language; ドメイン特化言語)で、その実体はXLRというプログラミング言語です。

XL Extensible Language

言語リファレンスによれば、C言語, Pascal, Ada, ModulaなどといったAlgol系に似た自然な構文を持ちながらも、Lisp由来の同図像性を持つ言語の力を備えるよう設計された言語だそう。強そう。


構文

XLRの構文は、パースされてXL0という抽象構文木の形式になります。XL0には4種のリテラルノード型(整数、実数、テキスト、シンボル)と4種の構造ノード型(前置、後置、中置、ブロック)があります。

XLRにはインデントによるブロック(オフサイドルール)があります。また、文と式の区別があり、文の優先順位より優先順位が低い中置演算子は文を、優先順位が高い中置演算子は式を区切ります。このようなルールによって、同図像性を持ちながらPythonやRubyのような書き方ができる言語になっています。

XLRの各演算子の優先順位・結合法則はxl.syntaxファイルで定義されています。また、それとは別に定義することが可能です。

次のコードは条件分岐の制御構造を中国語風に定義し、使ってみたものです。

syntax (PREFIX 121 如)

syntax (INFIX 50 則)
syntax (INFIX 31 否則)

如 true 則 TrueBody 否則 FalseBody -> do TrueBody
如 false 則 TrueBody 否則 FalseBody -> do FalseBody

如 mouse_x < 0 則
color "red"
否則
color "blue"


意味

XLRの意味 semantics は、項書き換えに基づいています。次のような構文が、XLRコンパイラーによって特別に扱われます。


  • 項書き換え宣言 パターン -> 実装

  • データ宣言 data パターン

  • 型宣言 名前:型

  • ガード 宣言 when 条件

  • 代入 参照 := 値

  • 順序演算子 ;または改行

  • インデックス演算子 参照.フィールドまたは参照[インデックス]


項書換え宣言

抽象構文木の書き換え規則を書きます。普通の関数宣言だと思って書いてもいいです。

パターンマッチを持つ言語によるプログラミングに慣れた人ならすぐにプログラムが書けると思いますが、ラムダ計算ではないということに注意してください。如 Cond:boolean 則 TrueBody 否則 FalseBodyのように、複雑なパターンを使うこともできます。


XLRは強く型付けされています。XLRの値の木の形によって、その値が型に属しているかどうかが決まります。例えば、boolean型はtruefalseにマッチし、block型はブロックノードにマッチします。


評価

XLRは必要呼びをします。ただし、シーケンスとして実行されるA;Bや、doを使ったdo Aの形の式は、その場で評価されます。