Low Level Programming Markup Language (LLPML)  †
XMLで記述するプログラミング言語のネイティブコンパイラです。CompilerLib?を利用しています。(関連日記)
- 構文解析を排除するため、.NET Frameworkの汎用XMLパーサーを使っています。
 
- XMLの手書きは記述性が悪いのですが、図形言語の内部表現という位置付けのため、手書きでの記述性は考慮しません。
 
#ref(): File not found: "LLPML-0.5-20070819.png" at page "LLPML"
ダウンロード  †
- ソース: &ref(): File not found: "LLPML-0.5-20070829.zip" at page "LLPML"; - var-intをvarに改名して型情報を付加
 
- ライセンス: パブリックドメイン
 
- 開発環境: Visual C# 2005 Express Edition(今から入手する場合、新バージョンの2008を推奨します)
 
過去のリリース  †
- ソース: &ref(): File not found: "LLPML-0.5-20070826.zip" at page "LLPML"; - 構造体内構造体
 
- ソース: &ref(): File not found: "LLPML-0.5-20070821.zip" at page "LLPML"; - switch/break/returnの修正、continueの追加、無駄なスタックフレームを抑制
 
- ソース: &ref(): File not found: "LLPML-0.5-20070819.zip" at page "LLPML"; - 制御構造、算術演算、ウィンドウ表示(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.4-20070817.zip" at page "LLPML"; - IIntValueで変数処理を抽象化
 
- ソース: &ref(): File not found: "LLPML-0.4-20070816.zip" at page "LLPML"; - 構造体、変数処理の抽象化(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.3-20070815.zip" at page "LLPML"; - 関数の戻り値、コールバック、変数宣言タグの分離、サンプルの整理(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.3-20070814.zip" at page "LLPML"; - 関数(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.2-20070806.zip" at page "LLPML"; - BASIC風forの追加(0.5でC言語風に仕様変更)
 
- ソース: &ref(): File not found: "LLPML-0.2-20070805.zip" at page "LLPML"; - ブロックとスコープ(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.1-20070729.zip" at page "LLPML"; - ASTオブジェクト(関連日記)
 
- ソース: &ref(): File not found: "LLPML-0.1-20070722.zip" at page "LLPML"; - 最初のリリース
 
作業予定  †
試行錯誤で仕様を模索しているため、仕様が確定するまでは非互換変更を行うことがあります。
仕様が確定するまでは、バージョン番号は進捗の目安です。マイナーバージョン間の互換性は保証しません。
第1段階: LLPML (Low Level)  †
実装完了後、LLPML 1.0として仕様を確定します。
- 【済】
ASTのオブジェクト化 
- 【済】
ブロックによる変数のスコープ 
- 【済】
関数 
- 【済】
構造体 
- 【済】
制御構造、算術演算 
- メンバ関数
 
- 継承
 
- 整数型
 
- 配列
 
第2段階: MLPML (Middle Level)  †
LLPMLの上層に構築する言語です。
実装完了後、MLPML 1.0として仕様を確定します。
- クラス(メタ情報付き構造体)
 
- 仮想関数
 
- インターフェース
 
- GC
 
- 委譲
 
- クロージャ
 
第3段階: 図形言語(仮称)  †
長大なXMLの手書きは非現実的なため、MLPMLを図形にマッピングして視覚化した言語です。
実装完了後、図形言語の名称を決定して、1.0として仕様を確定します。
この段階でC#や.NETから独立します。
- 図形マッピングという位置付けのため、MLPMLと仕様が同期します。
 
- 可能な限りキーボード入力を排除して、マウスだけで操作できるものを目指します。
 
- 描画エンジンとしてPixelDrawingを使用します。
 
- MLPMLでの開発
 
- 図形言語での開発(自分自身を記述)
 
- 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.5.20070829">
<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" />
<let>
	<var name="stdout" />
	<call name="GetStdHandle">
		<int name="STD_OUTPUT_HANDLE" />
	</call>
</let>
<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" />
	<var-ptr name="dummy" />
	<int>0</int>
</call>
</llpml>
コメント  †