日本語プログラミング言語「かけはし」文法

version 0.1a (2004/12/09(Thr)) - 一部説明追加

この文章は暫定的なものです。完成版では変更される可能性がある項目が非常に多く存在します。

この文章に対するご意見も受け付けています→BBSWiki

基本的文法

かけはしの基本的な書き方は以下のとおりです。

ソースファイル 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時とする)
ワンッ!
ワンッ!
ワンッ!
にゃー
にゃー
にゃー
にゃー
ぱっぽー
ぱっぽー
ぱっぽー




無限ループ。
無限ループ。

ここより下に書いてある事項は、上に書いてある事項よりもより暫定的なものです。

連続して同じオブジェクトの命令を呼び出す

かけはしでは、最後に呼び出した命令・関数のオブジェクト名を省略して書くことが出来ます。たとえば、次の二つのコードは同じ動作をします。

連続利用を用いない書き方。
コンソールに書く(「sin(60°)の値は」)。
コンソールに書く(数学のサイン(60°))。
コンソールに書く(「です。」)。

連続利用を用いた書き方。
コンソールに書く(「sin(60°)の値は」)。
      書く(数学のサイン(60°))。
      書く(「です。」)。// 引数の中で用いた関数の呼び出しには影響されない。

関数定義

(now writing)

クラス定義

(now writing)

更新履歴

version 0.1a (2004/12/09(Thr)) - 一部説明追加

version 0.1 (2004/12/08(Wed)) - 超暫定