Skip to content

Dangornushi/Proto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proto言語

これは、学生がOSSで作成しているインタプリタ型言語(スクリプト言語)です。改変、配布など自由ですがその際は出典を明記してください。 不具合や、改善点などあればissueまでお願いいたします。

 文法など

この言語では、関数、四則演算、標準出力が可能です。これらの機能は増えていくと予定されます。

変数定義

x = "OK";
y = 12;

文字リテラルでも、ナンバーでも型宣言は入りません。

四則演算

x = 12;
y = x + 1;
z = x + y;

なお、

n = 12;
n = n - 1;
n = n + 1;

はそれぞれ

n++;
n--;

とも表せます。

print文

@include main.ph

print(OK);

または、

put(OK);
put("\n");

と表せます。 これは、includeされたmain.ph内で

fn print(print_word):
    put(print_word);
    put("\n");
    return True;
end;

と定義されているからです。

input文

vall = input(arg1);

inputは、コンソールから文字列を入力する際に使用する文法です。引数には、文字列を受け取る際に表示する文字列を指定します。

関数定義

fn function(arg1,arg2):
    return 0;
end;

関数はfnで定義されます。他の言語と違い、インデントを機にする必要はありません。 その代わり、関数の終わりにはreturnとendが必要です。 引数はコンマで区切る必要があります。その際、変数に型をつける必要はありません。

return文

return 0;

return文は、関数が戻り値を渡す際に使われる文法です。変数、文字列、数字などを指定することができます。 関数内でしか使えません。

関数呼び出し

funcname(arg1,arg2);

関数呼び出しでは、引数を指定して関数を呼び出して実行することができます。 その際、引数は変数でないといけません。引数が二つ以上ある場合、それぞれをコンマで区切らなければなりません。

if文

x = 12;
word = "word";

if x > 0:
end;

if x < 16:
end;

if x == 12:
end;

if word == "word":
end;

これらは、実行結果がTrueになるif文です。 Trueの場合、比較文とendの間の式が実行されます。 比較文とは、その名の通り主に条件式に使われる文法です。 例えば、

val1 > val2
val1 < val2
val1 == val2

など不等号・等号がふくまれる特別な文体です。今のところ比較目的のif文でしか用途をしていませんが、応用が可能であると考えています。 また、Trueが返される場合も同様です。たとえば、

fn boolif():
    return True;
end;

とした場合の

if boolif:

は、boolif == Trueが短縮され、if文の結果がTrueとみなされ、以降の文が実行されます。 includeディレクトリの中にある戻り値のない標準関数は、基本的にTrueを返すようになっています。

while文

x = "True";
while x:
    print(x);
end;

指定の条件の場合endまでの処理を繰り返し行います。 こちらも、比較文によって制御されます。

実行

実行させたいファイルをprotoの後につけて実行するだけです。 開発環境ではpython3.8.2でテストしています。 main.prを実行する例です。

(windows)
$ python proto.py main.pr
or
$ proto main.pr

(mac/Linux)
$ python3 proto.py main.pr
or
$ ./proto main.pr

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published