テキストファイルを独自の構文でllvmIRに静的コンパイルします。
構文の特徴としては、入出力の関数を一文字で呼び出せる、改行で命令を区切るなどがあります。
git clone https://github.com/kechigon/klang.git
klangのビルド、klangのコードを実行するためのパッケージをインストールしてください
sudo apt install llvm-6.0 bison flex
/build
でmake
を実行してください/bin
配下にklangが生成されます
テキストファイルからllvmIRにコンパイルし、out.llとして出力します。
オプションでコンパイルに関する情報を表示できます。
./klang 任意のテキストファイル オプション
構文解析過程を表示 -s
コードの意味を表示 -m
llvmIRを表示 -l
<例>すべてを表示 -sml
入出力の機能はbuild-in-function
ディレクトリ内のファイルとリンクすると実行可能になります。
llvm-link out.ll bin/build-in-function/hoge.ll -S -o hoge.ll
printDouble.ll
double型の出力機能
printStr.ll
文字列の出力機能
printNewLine.ll
改行出力機能
scanDoubl.ll
double型の入力機能
lli hoge.ll
または
llc hoge.ll
clang hoge.s -o hoge
./hoge
klangは命令を改行により区切ります。また、今のところ関数という概念がないのでC言語のmain関数のようなものを作る必要がありません。
klangの型はdouble型のみですが、明示的に変数の前にdouble
とタイプします。
複数宣言、宣言時代入、またその両方を組み合わせることも可能です。
double a
double a, b, c
double a, b, c = 1
複数に代入することも可能です。
a = 1
a, b, c = 1
+=
で足し算、-=
で引き算、*=
で掛け算、/=
で割り算が可能です。
複数の変数に対しても可能です。
a += 1
a, b, c -= 1
$
に続けて文字列、変数、式などを出力し、;
で改行します。
;
の前と後は改行が必要です。
$"hello world"
$"1+1=" $1+1
;
#
の後に変数を指定します。
複数指定も可能です。
#a
#a, b, c
+
,-
,*
,/
の四則演算子、==
, !=
,<
,>
,<=
,>=
の比較演算子、&
,|
の論理演算子があります。
条件式が数値だった場合、0で偽、その他は真と評価されます。
if文はifとif-elseがあり、if-elseの場合else
を改行の前に書きます。
<if例>
if(式)
{
~
}else
{
~
}
<for例>
for(double hoge = 1, 式, hoge += 1)
{
~
}
<while例>
while(式)
{
~
}
/*
と*/
で囲んだ範囲
配列
関数
- 条件式と条件式を
&
,|
するとすべて真になる <例>a == 1 & b != 1
- 長い文字列が表示されない
- 制御構文の中に空行を入れられない
- 変数のみを条件式にするとすべて真になる <例>
a == 0 -> true, a -> true