SPVM言語仕様(ベータ 1.0以前)
SPVM言語仕様(ベータ 1.0以前)
[f:id:perlcodesample:20170905223938j:image:w240]
パッケージ宣言
パッケージ宣言は以下のように行います。
package PackageName { }
「PackageName」はパッケージ名です。
パッケージ名は、大文字、小文字、数値と「::」で構成されます。パッケージ名は、大文字で始まならなければなりません。先頭が小文字のパッケージ名は禁止されています。先頭が小文字のパッケージ名は、コアのために予約されています。
パッケージ名は、アンダースコア「_」を含むことができないことに注意してください。アンダースコアは、「パッケージテンプレート」のために使用されます。
# 適切 Foo Foo2 Foo::Bar Foo::Bar::Baz Foo::bar # 違反 foo foo::Bar 2Foo Foo_Bar
パッケージ宣言はファイル直下にされなければなりません。
# 適切 package PackageName { } # 違反 sub foo() : int { package PackageName { } }
フィールド宣言
フィールドの宣言は次のようにします。
has field_name : type_name;
「field_name」はフィールド名です。フィールド名は、大文字、小文字、数値とアンダースコア「_」で構成されます。フィールド名は、数値で始まってはいけません。アンダースコアは、2つ以上連続で続けることはできません。
# 適切 foo foo_bar foo2 foo_bar2 FOO # 違反 2foo foo__bar
「type_name」はひとつの型です。型については「型」のセクションで詳しく解説します。いくつかの型の例を列挙します。
byte short int long float double string PackageName
フィールド宣言は、パッケージ宣言の直下に置く必要があります。
# 適切 package PackageName { has field_name : type_name; } # 違反 has field_name : type_name; sub foo() : int { has field_name : type_name }
サブルーチン宣言
サブルーチンの宣言は以下のように行います。
sub sub_name(arg_name : type_name, ...) : descripter_name return_type_name { }
「sub_name」はサブルーチン名です。サブルーチン名は大文字、小文字、数字、アンダースコア「_」で構成されます。
サブルーチン名は、数字で始まってはなりません。アンダースコアは、2つ以上続けてはなりません。
# 適切 foo foo_bar foo2 foo_bar2 FOO # 違反 2foo foo__bar
「arg_name」は引数名です。これは変数名と同じです。変数名については「変数宣言」の項目で説明しています。
「type_name」は型です。型については「型」の項目で説明しています。
「arg_name : type_name」は「,」を使って繰り返すことができます。引数がなくてもかまいません。最大の個数は255個です。
「descripter_name」は、デスクリプタ名です。デスクリプタはなくてもかまいません。利用できるデスクリプタは以下です。現在利用できるデスクリプタはひとつだけです。
[名前] [説明] native このサブルーチンはネイティブです。
ネイティブサブルーチンは、「ネイティブサブルーチン」の項目で説明されています。
「return_type_name」は型あるいは「void」です。「void」は戻り値を持たないということを意味します。型については「型」の項目で説明されています。
サブルーチン宣言は、パッケージ宣言の直下に置かなければなりません。
# 適切 package PackageName { sub foo($nums : int[]) : int { } } # 違反 sub foo() : double { sub var() : void { } }
変数宣言
変数宣言は以下のように行います。
my var_name : type_name;
「var_name」は変数名です。変数名の最初の文字は「$」です。残りの文字は、大文字、小文字、数値、アンダースコア「_」で構成されます。
# 適切 $foo $FOO $foo2 $foo_bar
もし、変数宣言が行われれば、宣言の後で、変数を使うことができます。
「type_name」は型です。型については、「型」の項目で解説されています。