Top / LLPML

Low Level Programming Markup Language (LLPML)

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

#ref(): File not found: "LLPML-0.5-20070819.png" at page "LLPML"

ダウンロード

過去のリリース

作業予定

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

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

第1段階: LLPML (Low Level)

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

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

第2段階: MLPML (Middle Level)

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

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

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

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

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

図形言語の内部処理用を想定しているため記述性は低いです。ASTをXMLで記述するというイメージです。

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

#include <windows.h>

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

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

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

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

<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="dummy" />
<call name="WriteConsoleW">
	<var name="stdout" />
	<string name="hello" />
	<string-length name="hello" />
	<ptr name="dummy" />
	<int>0</int>
</call>

</llpml>

コメント



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