Java C# Ts GoのC系言語 Mind DNCLの日本語系言語の制御構文を比較して自作言語Re:Mindの構文を定める(for..if文)

# はじめに
Java C# Ts Goの新旧C系言語、Mind DNCLの日本語系言語の制御構文を比較して自作言語Re:Mindの構文を定めます。今回は少し複雑なループ制御。

自作言語Re:Mindの詳しい利用シーンのイメージは[こちらへ](https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde)。すみません、企画段階です。

## この記事内容の作業目的
[日本語トランスコンパイラ言語 Re:Mind （自作言語）と他言語との構文比較（FOR文）](https://qiita.com/mylifewithviolin/items/b669e02ecc8595e72b8f)という記事で、もっともシンプルなfor文(カウンタ変数なし、打ち切り条件なしの無限ループ)について検討しましたので、今回は比較的複雑なカウンタ変数ありの構文に加えて、間にif文で打ち切り条件がカウンタ満了前に入っている状態をモチーフとします。

## この記事内容の保証
※この記事には実装的な情報が含まれます。各言語で書かれた引用ソースの妥当性は保証されません。また、自作言語は開発中（というよりまだ企画段階）のため、本記事に開示された仕様は予告なく変更される場合があります。

# Java C# Ts Goの新旧C系言語の構文イメージ

なるべく長くならずイメージが比較しやすいよう、if文の比較判定用の変数の宣言は割愛します。また、カウンタ変数はint整数型でそろえ、インラインで宣言できる言語はそのようにします。拡張for文、foreach文、Iterator系はとりあえず今回対象外です。


## Java
```java:Java
    for (int i=0; i<10; i++)
    {
         //todo
         if(j==0)break;
         //todo
    }
```
## C#
```cs:C#
    for (int i=0; i<10; i++)
    {
         //todo
         if(j==0)break;
         //todo
    }
```
## TypeScript
```ts:TypeScript
    for (let i=0; i<10; i++)
    {
         //todo
         if(j==0)break
         //todo
    }
```
## Go
```go:Go
    for i:=0; i<10; i++ {
         //todo
         if j==0 {
            break
         }
         //todo
    }
```

各言語のFor構文の間に挟まれているtodoは各言語のコメントアウト符号によるコメントです。なにか実行文が書けますの意。j変数はその中でなんらか操作されている想定。
## まとめ
C言語由来の各言語は伝統の中かっこ「{}」をうまく使って、構文の区切りをトークナイザが識別できるようにしている感じですね。

GoはC言語由来の言語にもかかわらず、小かっこ「()」があるはずのところにないのは斬新な印象を受けます。しかしfor文の中かっこ開始「{」が改行されると構文エラーになります。if文からも小かっこトークンがなくなったので、中かっこ「{}」がはずせなくなった。このあたりはトレードオフといったところでしょうか。


# Mind DNCLの日本語系言語の構文イメージ
では、続いて日本語プログラミング言語のグループです。
VBAは日本語ではありませんが、中かっこ「{}」を使って区切ることはなく、構文の表現も自然言語の英語に近いので、こっちの方に寄せました。

## VBA（Excel用）
```vb:VisualBasic for Application
    For i = 0 To 9 Step 1
        'todo
        If J=0 Then Exit For
        'todo
    Loop
```
## Mind
```mind:Mind
    １０を　回数指定して
       ※todo
        Jが　0に　等しい
            ならば　打ち切り
            つぎへ
       ※todo
    繰り返す
```
「回数」が既定のカウンタ変数となっていて、構文内で参照することができる。インクリメンタル数指定の構文があるかはわかりませんでした。
## DNCL
```mind:DNCL
    i を 1 から 10 まで 1 ずつ増やしながら，
        //todo
        もし　j = 0　ならば
            //脱出文は未定義？
        実行する
        //todo
    を繰り返す
```
DNCLはループ文中の条件分岐で脱出させる実行文は定義されていない模様。存在するならば、確認でき次第訂正します。

# 自作言語の構文イメージ

## Re:Mind
```mind:Re:Mind
    〇i=0,i<10,i++ 繰り返す
        //todo
        ◇j==0 の場合 やめる
        //todo
    〇ここまで
```

分岐やループを直感的に表す全角記号「◇」や「〇」を積極的にトークンとして活用しようと考えているのが、「Re:Mind」（自作言語リマインド）の特徴です。
また、日本語のまま記述すると、書くのが手間になりそうな構文はある程度の半角文字の記号表現（慣れれば直感的にわかりそうな範囲）を許容しようかなと考えております。C言語系に慣れているとセミコロン;打っちゃいそうなところは、余裕があれば許容するとしたいです。また、もう少し日本語的で簡潔な表記があれば、それも可としたい。

# プロデル なでしこ 第2世代日本語系言語の構文イメージ（参考）
あまりと言いますかかなり詳しくはないのですが、参考にわたしの心の中での第2世代日本語プログラミング言語「プロデル」と「なでしこ」の制御構文も比較してみました。よくわかっていないので、間違っていたらごめんなさい。訂正します。
## プロデル
```mind:プロデル
    Iを0から1ずつ増やしながら9まで繰り返す
        //todo
        もしJが0なら、繰り返しから抜け出す
        //todo
    繰り返し終わり
```

## なでしこ
```mind:なでしこ
    カウンタで０から９まで繰り返す
        //todo
        もし、Jが０ならば、抜ける
        //todo
    ここまで
```
2言語とも単行コメント文にはダブルスラッシュ可のようでした。
脱出文は、プロデルは「繰り返しから抜け出す」、なでしこは「抜ける」のようです。各言語作者の好みといいますか、このあたりのゆらぎは面白いですね。
なでしこの「ここまで」はオプショナルの模様。インクリメンタル数指定の構文があるかはわかりませんでした。

なでしこv3はjavaScriptをターゲット言語として、ソース言語をなでしこv1互換とした日本語トランスコンパイラ言語とも言えそうですね。

# おわりに


[日本語トランスコンパイラ言語](https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde)という企画を実現・設計・実装していくには、スキル上の課題や未獲得の知見など多数あることが予想されます。Qiita様の場をお借りして、獲得したスキルや知見の共有、いたらない点のご支援をいただければと考えています。

# 参考リンク

[Mind プログラミングマニュアル ３ 制御構文](http://www.scripts-lab.co.jp/mind/ver8/doc/03-Control-syntax.html#naraba)

[共通テスト手順記述標準言語 (DNCL) の説明](https://www.dnc.ac.jp/albums/abm.php?d=88&f=abm00001247.pdf&n=%E4%BB%A4%E5%92%8C%EF%BC%93%E5%B9%B4%E5%BA%A6%E8%A9%A6%E9%A8%93%E5%85%B1%E9%80%9A%E3%83%86%E3%82%B9%E3%83%88%E6%89%8B%E9%A0%86%E8%A8%98%E8%BF%B0%E6%A8%99%E6%BA%96%E8%A8%80%E8%AA%9E%EF%BC%88DNCL%EF%BC%89%E3%81%AE%E8%AA%AC%E6%98%8E.pdf)

[目次－プロデルで始める日本語プログラミング言語入門](https://wp.utopiat.net/produirefirststep/)

[日本語プログラミング言語「なでしこ」 制御構文](https://nadesi.com/doc/reference/syntax/1-6-koubun.htm)

https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde

https://qiita.com/mylifewithviolin/items/ebb406bf5ea7a4eea24c

https://qiita.com/jpl_produire/items/0aed0a6699e89a794211

https://qiita.com/kujirahand/items/03d506d71472c2361de2