Top / LLPML

Low Level Programming Markup Language (LLPML)

XMLと簡略記法(Andromeda:JavaScript風の言語)のネイティブコンパイラです。CompilerLib?を利用しています。 ⇒ 関連日記

ダウンロード

1.0をリリースしました。 ⇒ 関連日記

概要

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

1.0までの作業

実装は完了して、1.0をリリースしました。

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

現在の方針

開発中のリリース

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