XMLと簡略記法(Andromeda:JavaScript風の言語)のネイティブコンパイラです。CompilerLib?を利用しています。 ⇒ 関連日記
#ref(): File not found: "LLPML-0.11-20080314.png" at page "LLPML"
図形言語の内部処理用を想定しているため記述性は低いです。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>