日本語プログラミング言語「かけはし」文法
version 0.1a (2004/12/09(Thr)) - 一部説明追加
基本的文法
かけはしの基本的な書き方は以下のとおりです。
ソースファイル hello1.kake
// かけはしで書く「Hello, World」
メイン{
コンソールに書く(「Hello, World」を)
}
実行結果
Hello, World
コンパイラに「ファイル全体をメイン関数とする」オプションを指示すると、以下の書き方ができます。
ソースファイル hello2.kake (オプション:ファイル全体をメイン関数とする)
// かけはしで書く「Hello, World」(メイン関数なし版)
コンソールに書く(「Hello, World」を)
※"メイン" という名前はほかにわかりやすいものがないか検討中。
名前空間の参照
かけはしでは、.NET の外部クラスに対して XML ファイルでクラス名やメソッド名を定義したデータを使用します。
たとえば、System.Console クラスを使うために「DLL を参照設定する」「"コンソール"は "System.Console"」「"コンソールに書く" は "System.Console.WriteLine"」といった情報を定義しています。
かけはしコンパイラは、コンパイルの開始前に設定された定義 XML ファイルを読み取り、かけはし内で使えるクラス名を探し出します。
変数
かけはしでは、以下の方法で変数を利用できます。
変数宣言の例
// 型設定なしの変数宣言
データ1を変数とする。
// 文字列型の変数宣言
データ2を文字列とする。
// 数値を代入
データ1=15
コンソールに書く(データ1)
データ1は30
コンソールに書く(データ1)
// 文字列を代入
データ2=「文字列」
コンソールに書く(データ2)
データ2は「ほげほげ。」
コンソールに書く(データ2)
// 宣言していない変数を使う
データ3は「宣言していない変数です。」
コンソールに書く(データ3)
// コンストラクタに引数が必要な変数の宣言その1。
データ4をテストクラスとする。
データ4を準備(データ1、データ2)。
// コンストラクタに引数が必要な変数の宣言その2。
データ5をテストクラスとする。
データ5=新しいテストクラス(データ1、データ2)。
実行結果
15
30
文字列
ほげほげ
宣言していない変数です。
※"コンストラクタに引数が必要な変数の宣言" についてはまだ検討中の段階。
また、コンパイラに「変数の宣言を強制する」オプションが指定されていなければ変数宣言の必要性はなく、宣言されていない変数の型は基本型(変数)になります。
かけはしで使える基本の型は以下のとおりです。これ以外にもクラスで定義されている型が使用できます。
| かけはし型 | .NET Framework 型 | 説明 |
| スイッチ | System.Boolean | オン/オフ |
| 文字 | System.Char | |
| 文字列 | System.String | |
| 整数 | System.Int32 | |
| 数値 | System.Double | |
| 変数/基本型 | System.Object | すべてのオブジェクトはSystem.Objectから派生してるので、この名前。 |
かけはしコンパイラは、コンパイルの開始前に設定された定義 XML ファイルを読み取り、かけはし内で使えるクラス名を探し出します。
変数のスコープに関しては、VisualBasic.NET に準じます。[Todo:詳細を]
関数呼び出し
以下のような記述で命令・関数を呼び出します。
関数呼び出しの例
// 引数のない命令の呼び出し。
入力データを文字列とする。
入力データ=コンソールを読む。
// 引数のある命令の呼び出し。
コンソールに書く(入力データを)
こんな感じの仕様になっています。
- (オブジェクト名){の|を|で|に}(メソッド名)が基本。
- 引数には、区切り記号で区切る普通のプログラミング言語っぽい表記と、助詞を書く日本語らしい表記がある。
- 前者を用いると引数の順番を守る必要があるが、後者の場合は自由な順番で書くことができる。
分岐
分岐するときは、「もし」文を使います。
分岐の例
もし(時計の月は2以上、時計の月は5以下)なら{
コンソールに書く(「春です。」)
また(時計の月は6以上、時計の月は8以下)なら{
コンソールに書く(「夏です。」)
また(時計の月は9以上、時計の月は11以下)なら{
コンソールに書く(「秋です。」)
}他なら{
コンソールに書く(「冬です。」)
}
こんな感じの仕様になっています。
- 「もし(条件式、条件式、・・・){なら|でないなら|どれかなら}」が基本。
- 「なら」は省略できる。
- 条件式は「、」で並べて記述でき、その条件を最後に決定する。「なら」はAND、「どれかなら」はOR、「でないなら」はNOT。
- elseif は「また」、else は「他なら」。
反復処理
反復処理をするときは、「繰り返す」文を使います。
反復処理の例
繰り返す(3回){
コンソールに書く(「ワンッ!」)
}
繰り返す(0から3まで){
コンソールに書く(「にゃー」)
}
繰り返す(時計の時だけ){
コンソールに書く(「ぱっぽー」)
}
変数1を整数とする。
繰り返す(変数1に0から3まで){
コンソールに書く(変数1)
}
// 無限ループ
繰り返す(無限に){
コンソールに書く(「無限ループ。」)
抜ける。
}
// コンパイラオプションで「「無限に」を省略するを指定すると以下の記述ができる。」
繰り返す{
コンソールに書く(「無限ループ。」)
抜ける。
}
実行結果 (実行したのは午前3時とする)
ワンッ!
ワンッ!
ワンッ!
にゃー
にゃー
にゃー
にゃー
ぱっぽー
ぱっぽー
ぱっぽー
0
1
2
3
無限ループ。
無限ループ。
ここより下に書いてある事項は、上に書いてある事項よりもより暫定的なものです。
連続して同じオブジェクトの命令を呼び出す
かけはしでは、最後に呼び出した命令・関数のオブジェクト名を省略して書くことが出来ます。たとえば、次の二つのコードは同じ動作をします。
連続利用を用いない書き方。
コンソールに書く(「sin(60°)の値は」)。
コンソールに書く(数学のサイン(60°))。
コンソールに書く(「です。」)。
連続利用を用いた書き方。
コンソールに書く(「sin(60°)の値は」)。
書く(数学のサイン(60°))。
書く(「です。」)。// 引数の中で用いた関数の呼び出しには影響されない。
関数定義
(now writing)
クラス定義
(now writing)
更新履歴
version 0.1a (2004/12/09(Thr)) - 一部説明追加
version 0.1 (2004/12/08(Wed)) - 超暫定
