3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自然な日本語で注文するとソースコードを作ってくれる「AI Programmer」に日本語プログラミング言語Mind DNCL なでしこ プロデル Re:MindのIf..else if文でC#のコードを生成してみた

Last updated at Posted at 2023-02-18

はじめに

日本語の文章を元にAIがソースコードを書いてくれるサービス「AI Programmer」がプロトタイプとして無償公開されています。対応するプログラミング言語にC#がありましたので、さっそく日本語プログラミング言語Mind DNCL なでしこ プロデル Re:Mind各言語の構文を与えて、結果がどうなるか確認してみました。まずは、If..else if文。

この記事内容の作業目的

自作言語Re:Mindの構文仕様策定の参考情報としてAIによる構文認識度を検討します。

この記事内容の保証

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

各日本語プログラミング言語の構文によるC#への変換結果

Mind

Mind
    Iが 0より 大きい
        ならば
            Jが 0に 等しい
                ならば ※todo
                さもなければ ※todo
                つぎへ
                ※todo
        さもなければ
            Iが 0より 小さい
                ならば ※todo
                さもなければ ※todo
                つぎへ
        つぎへ
C#変換結果
    if (I > 0)
    {
        if (J == 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }
    else
    {
        if (I < 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }

Mindはif..else if文がなさそうなのでelse側の入れ子で対応しましたが、その点も忠実に変換されました。※todoがコメント文として変換されたのは、驚きでした。しかいし、こまかい点ですが、最初のif文の入れ子のif文の後のdoコメントtodoは無視されました。

DNCL

DNCL
    もし I > 0 ならば
        もし J = 0 ならば
            //todo
        を実行し,そうでなければ
            //todo
        実行する
        //todo
    を実行し,そうでなくもし I < 0 ならば
        //todo
    を実行し,そうでなければ
        //todo
    実行する
C#変換結果
    if(i>0)
    {
        if(j==0)
        {
           //todo
        }
        else
        {
           //todo
        }
       //todo
    }
    else if(i<0)
    {
        //todo
    }
    else
    {
        //todo
    }

DNCLはif..else if文も含めて忠実に変換されました。こまかい点ですが、最初のif文の入れ子のif文の後のtodoも評価されました。

なでしこ

なでしこ
    もし、I > 0 ならば
        もし、J = 0 ならば
           //todo
        違えば
           //todo
        ここまで
       //todo
    違えば、もし、I < 0 ならば
       //todo
    違えば
       //todo
    ここまで
C#変換結果
    if (I > 0)
    {
        if (J = 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }
    else
    {
        if (I < 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }

なでしこはif..else if文のelse ifが認識されない場合があるようでif文の入れ子で変化されました。念のため数回リトライしている。こまかい点ですが、最初のif文の入れ子のif文の後のtodoは無視されました。

プロデル

プロデル
    もし i > 0 なら
        もし j = 0 なら
          //todo
        そうでなければ
          //todo
        もし終わり
      //todo
    他でもし i < 0 なら
      //todo
    そうでなければ
      //todo
    もし終わり
C#変換結果
    if (i > 0)
    {
        if (j == 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }
    else if (i < 0)
    {
        //todo
    }
    else
    {
        //todo
    }

プロデルはif..else if文も含めて忠実に変換されました。こまかい点ですが、最初のif文の入れ子のif文の後のtodoは無視されました。

Re:Mind

  • Re:Mind
Re:Mind
    ◇i > 0 の場合
        ◇j == 0 の場合
            //todo
        ◇他に
            //todo
        ◇ここまで
        //todo
    ◇他に i < 0 の場合
        //todo
    ◇他に
        //todo
    ◇ここまで
C#変換結果
    if (i > 0)
    {
        if (j == 0)
        {
            //todo
        }
        else
        {
            //todo
        }
    }
    else
    {
        //todo
    }

Re:Mindはelse ifが認識されずカットされました。ifに相当するキーワードを用いず対人的に直感性を意図した◇だけというのがあだとなっているようです。もう少し学習してもらえれば、いけるようになるのぁもしれません。こまかい点ですが、最初のif文の入れ子のif文の後のtodoも無視されました。

まとめ

優劣を競うものではありませんが、DNCL構文が「AI Programmer」にとって一番認識しやすいというのは意外でした。
Re:Mindは記号表現を含むのである程度結果を予想していました。

おわりに

ChatGPTで同じような企画を考えていたのですが、よりプログラミング言語に特化した日本発のサービス(有限会社ASRealが提供している日本語対応のAIサービス)を発見したので、そちらでやってみました。
わたしの方向性としてはAIとの共存です。いつも仕事ではQiitaにあがった事例もたいへん参考にしておりますし、参考情報の選択肢が広がるのは助かります。

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

参考リンク

Mind プログラミングマニュアル 3 制御構文

共通テスト手順記述標準言語 (DNCL) の説明

目次-プロデルで始める日本語プログラミング言語入門

日本語プログラミング言語「なでしこ」 制御構文

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?