Low Level Programming Markup Language (LLPML) †
CompilerLib?を利用したXMLの低レベルな言語処理系です。(関連日記)
- XMLの手書きは記述性が悪いのですが、最終的には図形言語の内部表現にする予定です。
- 図形言語への展開が前提のため、XML自体の手書きでの記述性は追求しません。テキスト処理系への展開もありません。
- 図形言語は大抵の処理をマウスだけで記述できるようにする予定です。
- PixelDrawingの開発言語をLLPMLに移行して、図形言語の描画エンジンとして使用する予定です。
#ref(): File not found: "LLPML-0.5-20070819.png" at page "LLPML"
ダウンロード †
- ソース: &ref(): File not found: "LLPML-0.5-20070821.zip" at page "LLPML"; - switch/break/returnの修正、continueの追加、無駄なスタックフレームを抑制
- ライセンス: パブリックドメイン
- 開発環境: Visual C# 2005 Express Edition(今から入手する場合、新バージョンの2008を推奨します)
過去のリリース †
- ソース: &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"; - 最初のリリース
今後の課題 †
- 【済】
ASTのオブジェクト化
- 【済】
ブロックによる変数のスコープ
- 【済】
関数
- 【済】
構造体
- 【済】
制御構造、算術演算
- クラス
- DLL
- GC
- 自分自身の記述(=LLPMLとCompilerLibをLLPMLで記述する)
- 図形言語
図形言語の内部処理用を想定しているため記述性は低いです。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.4.20070816">
<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-int-declare name="stdout" />
<let>
<var-int name="stdout" />
<call name="GetStdHandle">
<int name="STD_OUTPUT_HANDLE" />
</call>
</let>
<string-declare name="hello">Hello, World!
</string-declare>
<var-int-declare name="dummy" />
<call name="WriteConsoleW">
<var-int name="stdout" />
<string name="hello" />
<string-length name="hello" />
<var-int-ptr name="dummy" />
<int>0</int>
</call>
</llpml>
コメント †