Top / LLPML

Low Level Programming Markup Language (LLPML)

XMLで記述するプログラミング言語のネイティブコンパイラです。CompilerLib?を利用しています。 ⇒ 関連日記

#ref(): File not found: "LLPML-0.9-20080123.png" at page "LLPML"

ダウンロード

過去のリリース

作業予定

試行錯誤で仕様を模索しているため、仕様が確定するまでは非互換変更を行うことがあります。

仕様が確定するまでは、バージョン番号は進捗の目安です。マイナーバージョン内でも互換性は保証しません。

第1段階: LLPML (Low Level)

実装完了後、LLPML 1.0として仕様を確定します。

  1. 【済】ASTのオブジェクト化
  2. 【済】ブロックによる変数のスコープ
  3. 【済】関数
  4. 【済】構造体
  5. 【済】制御構造、算術演算
  6. 【済】メンバ関数
  7. 【済】コンストラクタ・デストラクタ
  8. 【済】継承
  9. 【済】簡略記法
  10. 配列
  11. 整数型
  12. 仮想関数
  13. インライン型高階関数

第2段階: MLPML (Middle Level)

LLPMLの上層に構築する言語です。 実装完了後、MLPML 1.0として仕様を確定します。

  1. クラス(メタ情報付き構造体)
  2. インターフェース
  3. GC
  4. 委譲
  5. クロージャ

第3段階: 図形言語(仮称)

長大なXMLの手書きは非現実的なため、MLPMLを図形にマッピングして視覚化した言語です。 実装完了後、図形言語の名称を決定して、1.0として仕様を確定します。 この段階でC#や.NETから独立します。

  1. MLPMLでの開発
  2. 図形言語での開発(自分自身を記述)
  3. CompilerLib, LLPML, MLPMLを図形言語で再実装

図形言語の内部処理用を想定しているため記述性は低いです。ASTをXMLで記述するというイメージです。しかしあまりにも記述性が低くてサンプルの作成だけでも苦労したため、簡略記法を導入しました。

以下にもサンプルがあります。

以下には細かい部分でのC言語との比較があります。

標準出力

以下のC言語と同等のものを作成します。

#include <windows.h>

int main()
{
    HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
    const char *hello = "Hello, World!\r\n";
    DWORD dummy;
    WriteConsole(stdout, hello, lstrlen(hello), &dummy, NULL);
    return 0;
}

LLPMLでは以下のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<llpml version="0.6.20070904">

<extern module="kernel32.dll" type="std" name="GetStdHandle" />
<extern module="kernel32.dll" type="std" name="WriteConsoleW" />
<extern module="kernel32.dll" type="std" name="lstrlenW" />

<int-declare name="STD_OUTPUT_HANDLE">-11</int-declare>
<var-declare name="stdout">
	<call name="GetStdHandle">
		<int name="STD_OUTPUT_HANDLE" />
	</call>
</var-declare>

<string-declare name="hello">Hello, World!
</string-declare>
<var-declare name="length" />
<call name="WriteConsoleW">
	<var name="stdout" />
	<string name="hello" />
	<call name="lstrlenW"><string name="hello" /></call>
	<ptr name="length" />
	<int>0</int>
</call>

</llpml>

XMLだけでは記述が大変なので、簡略記法が用意されています。

<?xml version="1.0" encoding="utf-8" ?>
<llpml version="0.9.20080127">

<extern module="kernel32.dll" type="std" name="GetStdHandle" />
<extern module="kernel32.dll" type="std" name="WriteConsoleW" />
<extern module="kernel32.dll" type="std" name="lstrlenW" />

<?llpml
const int STD_OUTPUT_HANDLE = -11;
var stdout = GetStdHandle(STD_OUTPUT_HANDLE);
const string hello = "Hello, World!\n";
var length;
WriteConsoleW(stdout, hello, lstrlenW(hello), addrof(length), null);
?>

</llpml>

コメント



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS