小学生(当時)のぼくがかんがえたさいきょうのプログラミング言語

Javaを勉強したての頃に考えたプログラミング言語の仕様。当時は小6か中1だったはず。 クラスとインスタンスの違いもわからない状態で仕様を考えたのでめちゃくちゃです。
gotoで何でもしようとしてるのが面白いね。
sinとsoutという名前は、当時C++に若干浮気していたからです。
標準入出力の機能をわざわざ予約語として用意しているのは、当時Javaでの標準入力が難しすぎて躓いていたからだと思います。

当然処理系はありません。

仕様書(笑)はいくつかありますが、どれも未完成です。Javaとの対比という形で文法が説明されています。なかなかおもしろいと思うので公開します。

BP言語0.1.0 仕様書(0.0) 2015-05-10

==================================================
予約語
    予約語は変数名や、クラス名、メソッド名、ラベル名には使えません。
    --- 一覧 ----------------------------
    予約語   例                     java
    if      if:i == j:
                /*処理*/
            ;                       if(i == j){
                                        /*処理*/
                                    ;
    --------------------------------------------------------
    else    else:i == j:
                /*処理*/
            ;                       else if(i == j){
                                        /*処理*/
                                    }
    --------------------------------------------------------
    else    else::
                /*処理*/
            ;                       else{
                                        /*処理*/
                                    }
    --------------------------------------------------------
    loop    loop:2:
                /*処理*/
            }                       while(!(i == 2)){
                                        /*処理*/
                                    }
    --------------------------------------------------------
    while   while:i == j:
                /*処理*/
            ;                       while(i == j){
                                        /*処理*/
                                    }
    --------------------------------------------------------
    sin     sin:str;                BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
                                    String str = input.readLine();
    --------------------------------------------------------
    sout    sout:"Hello";           System.out.print("Hello");
    --------------------------------------------------------
    for     for:i=0:i<=5:i=i+1:
                /*処理*/
            ;                       for(i=0; i<=5; i=i+1;){
                                        /*処理*/
                                    }
    --------------------------------------------------------
    goto    :public,static:void:main(string[].args, int.a):
                /*処理*/
            ;
            goto::main:(str[], i);  public static void main(String[] args, int a){
                                        /*処理*/
                                    }
                                    CLASS cl = new CLASS();
                                    cl.main(str[], i);
    --------------------------------------------------------
    
==================================================
goto
    --- 使い方 -----------------------------------------------
    No. BP                              java
    --------------------------------------------------------
    1   goto::CLASS.main:;              CLASS.main();
    --------------------------------------------------------
    2   goto::CLASS.main:str, i;        CLASS.main(str, i);
    --------------------------------------------------------
    3   goto:i:CLASS.main:;             i = CLASS.main();
    --------------------------------------------------------
    4   goto:i:CLASS.main:str, ch;      i = CLASS.main(str, ch);
    --------------------------------------------------------
    goto文は、
        goto : 戻り値を受ける変数名 : クラス名.メソッド名 : 引数1, 引数2… ;
    のようにかく。
    ただし、処理するメソッドが同じクラスにあるときは、
        goto : 戻り値を受ける変数名 : .メソッド名 : 引数1, 引数2… ;
    のようにかくこともできる。
    
    
    --------------------------------------------------------
    5   goto::LABEL:;                   break label;
    6   goto:::;                        break;
    --------------------------------------------------------
    goto :: LABEL :;
    のようにかくと、指定されたラベルが付けられたブロックを抜ける。
    
    
    --- まとめ ------------------------------------------------
    --------------------------------------------------------
    通常
        goto : 戻り値を受ける変数名 : クラス名.メソッド名 : 引数1, 引数2… ;
            ・import文が必要。
            ・行き先のメソッドで、end文が処理されるとこの文のつぎの文が処理される。
    --------------------------------------------------------
    処理するメソッドが同じクラスにあるとき
        goto : 戻り値を受ける変数名 : .メソッド名 : 引数1, 引数2… ;
            ・メソッド名の前に、"."をつける。
            ・行き先のメソッドで、end文が処理されるとこの文のつぎの文が処理される。
    --------------------------------------------------------
    指定されたラベルが付けられたブロックを抜けるとき
        goto :: LABEL :;
    --------------------------------------------------------
    いちばん内側のブロックを抜けるとき
        goto:::;
    --------------------------------------------------------
    --------------------------------------------------------
    
==================================================
クラスの宣言

クラスを宣言するには、
    : 修飾子1, 修飾子2, … : class : クラス名 :
        /* クラスの内容 */
    ;
のようにかく。

==================================================
メソッドの宣言

メソッドを宣言するには、
    : 修飾子1, 修飾子2, … : 戻り値の型 : メソッド名 :
        /* メソッドの内容 */
    ;
    
BP言語0.0.3仕様書 0.2  2015-04-29

==========================================================================
1. 拡張子
    .bp

==========================================================================
2. 大文字と小文字
    BPコンパイラは、大文字と小文字を区別しない。

==========================================================================
3. コメント
    3.1 1行コメント
        -----------------------------
        |   ?? ここにコメントを書く   |
        -----------------------------
        の様に、??で始まる。
    3.2 複数行コメント
        複数行コメントはありません。

==========================================================================
4. リテラル
    リテラルには、文字、文字列、整数(int)、整数(long)、浮遊小数点数、がある。
    ---記述例----------------------------------------
    文字              :'a'
    文字列           :"aaa"
    整数  (int)       :123
    整数  (long)      :123L
    浮遊小数点数      :12.98
    ------------------------------------------------

==========================================================================
BP言語仕様 0.0.2


========================================================================================

文は、

コマンド名:処理1:処理2;

のように":"で区切り、";"で終わる。


========================================================================================

コメントは、

??コメント

のように"??"で始まり、Unicode:U+000Aで終わる(複数行には又がらない)。


========================================================================================

リテラルには、文字、文字列、整数、浮遊小数点数、がある。

---記述例----------------------------------------
文字          :'a'
文字列       :"aaa"
整数          :123
浮遊小数点数  :12.98
------------------------------------------------


========================================================================================


制御文には、if文、else文、else if文、goto文、loop文、for文、while文、do-while文、がある。

---記述例----------------------------------------
if          if:条件式:処理;
else        else::処理;
else if     else if:条件式:処理;
goto        goto:飛び込み先;
loop        loop:処理の回数:処理;
for         for:(初期化式):条件式:(変化式):処理;
while       while:条件式:処理;
do-while    do_:処理:_while:条件式;
------------------------------------------------


========================================================================================

---コマンド一覧------------------------------------
コマンド                内容                      例                         java

break               ループから抜け出す         while:i == 1:               while(i == 1){
                                                break;                      break;
                                            ;                           }

char                文字型変数の宣言            char:let;                   char let;

sin                 入力                      cin:let;                    BufferedReader br = new BufferedReader 
                                                                            (new InputStreamReader (System.in));
                                                                            String str = br.readLine( );
sout                出力                      cout:"hello\n";             System.out.print("hello\n");

double              浮動小数点数型               double:d;                   double d;
                    64ビット浮動小数点数
                    の宣言

do-while            繰り返し                    do:                     do{
                                                cout:"\ni:";                System.out.print("\ni:");
                                                cout:i;                     System.out.print(i);
                                                i:i+1;                  i = i + 1;
                                            :while:!(i == 5);           }while(!(i == 5))

else                条件分岐                    else::                      else{
                                                cout:"See you\n";           System.out.print("See you\n");
                                            ;                           }

else if             条件分岐                    else:i == 0:                else if(i == 0){
                                                cout:"Hi\n";                System.out.print("Hi\n");
                                            ;                           }

end                 ブロックの終わり            box:                        void box(){
                                                end:;                       return null;
                                            ;                           }

exit                プログラムの終わり         box:                        void box(){
                                                exit:0;                     System.exit(0);
                                            ;                           }

for                 繰り返し                    for:(i:0;):i<=5:(i:i+1): for(i=0; i<=5; i=i+1;){
                                                cout:"\ni:";                System.out.print("\ni:");
                                                cout:i;                     System.out.print(i);
                                            ;                           }

goto                飛び込み                    label:                      label:{
                                                goto:label;                 break label:
                                            ;                           }

if                  条件分岐                    if:i==1:                    if(i==1){
                                                                            
                                            ;                           }

int                 整数型                   int:i;                      int i;
                    32ビット符号つき変数の宣言

long                整数型
                    64ビット符号つき変数の宣言      long:l;                     long l;

loop                n回繰り返す                loop:5:                     for(i=0;i<=5;i++;){
                                            ;                           }

string              文字列型変数の宣言         string:str;                 string str;

while               繰り返し                    while:i==0:                 while(i==0){
                                            ;                           }

-------------------------------------------------


========================================================================================

変数

---変数の種類--------------------------------------

型         意味                              大きさ   範囲

char        文字型                           8b      u0000~uffff
int         整数型 32ビット符号つき               32b     -2147483648~+2147483647
long        整数型 64ビット符号つき               64b     -9223372036854775808~+9223372036854775807
double      浮動小数点数型 64ビット浮動小数点数 64b     IEEE754-1985
string      文字列型                            --      --

-------------------------------------------------

代入の方法

char:'a';
int:123;
long:123L;
double:123.4;
string:"Abc";


========================================================================================

エスケープ
"\"または"¥"を使用する。

---エスケープ一覧-----------------------------------

記述          意味
\n          
\t
\b
\r
\f
\\
\¥
\'
\"
\000
\u0000