Top / LLPML

Low Level Programming Markup Language (LLPML)

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

#ref(): File not found: "LLPML-0.11-20080314.png" at page "LLPML"

作業予定

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

  1. 【済】ASTのオブジェクト化
  2. 【済】ブロックによる変数のスコープ
  3. 【済】関数
  4. 【済】構造体
  5. 【済】制御構造、算術演算
  6. 【済】メンバ関数
  7. 【済】コンストラクタ・デストラクタ
  8. 【済】継承
  9. 【済】簡略記法
  10. 【済】配列
  11. 【済】整数型
  12. 【済】プロパティ
  13. 【済】無名関数
  14. 【済】仮想関数
  15. 【済】関数の戻り値の型
  16. 【済】ラムダ式
  17. 委譲
  18. クロージャ
  19. staticメンバ
  20. new/delete
  21. インライン関数

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

ダウンロード

過去のリリース

図形言語の内部処理用を想定しているため記述性は低いです。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.10.20080205">

<extern module="kernel32.dll" type="std" name="GetStdHandle">
  <arg name="nStdHandle" />
</extern>
<extern module="kernel32.dll" type="std" suffix="W" name="WriteConsole">
  <arg name="hConsoleOutput" />
  <arg name="lpBuffer" />
  <arg name="nNumberOfCharsToWrite" />
  <arg name="lpNumberOfCharsWritten" />
  <arg name="lpReserved" />
</extern>
<extern module="kernel32.dll" type="std" suffix="W" name="lstrlen">
  <arg name="lpString" />
</extern>

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

</llpml>

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

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

<?llp
extern "kernel32.dll" __stdcall
{
  GetStdHandle(nStdHandle);
  __widecharset WriteConsole(
    hConsoleOutput, lpBuffer, nNumberOfCharsToWrite,
    lpNumberOfCharsWritten, lpReserved);
  __widecharset lstrlen(lpString);
}

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

</llpml>

コメント



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