COBOL に Bing AIで挑む

全銀ネットで話題の COBOL を Bing AI を使って、Python に翻訳できるかやってみました。
COBOL については良く知らないので以下の Qiita の記事を参考にしています。
ちなみに小数の丸め誤差やバッチ処理が得意とかもあるようなので、 COBOL はダメだとか言える程良く知らないです。
単なる好奇心です。

<質問>
以下のCOBOLのコードをPythonに翻訳してください。

  *---1---------2---------3---------4---------5
   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            SAMPLE.
  *
   ENVIRONMENT            DIVISION.
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   01  STR                PIC X(5)
                            VALUE 'WORLD'.
  *
   PROCEDURE              DIVISION.
   MAIN                   SECTION.
   MAIN-S.
     DISPLAY              "HELLO " STR.
   MAIN-E.
     STOP RUN.

<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。

print("HELLO WORLD")

<以下の文言は、全ての回答に入るので以下は[いつもの文言]と記載します。>
COBOLとPythonは、文法や構造が大きく異なるため、翻訳することは容易ではありません。ただし、このCOBOLコードは非常にシンプルであるため、Pythonに翻訳することができます。上記のPythonコードは、COBOLコードと同じ出力を生成します。

できました。計算はどうでしょうか。

<質問>
以下のCOBOLのコードをPythonに翻訳してください。

  *---1---------2---------3---------4---------5
   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            SAMPLE.
  *
   ENVIRONMENT            DIVISION.
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   01  RESULT             PIC 9(02).
   01  IN-NUM             PIC 9(01)
                            VALUE 9.
  *
   PROCEDURE              DIVISION.
   MAIN                   SECTION.
   MAIN-S.
  *--ケイサン
     COMPUTE              RESULT = IN-NUM + 1.
  *--シュツリョク
     DISPLAY              RESULT.
   MAIN-E.
     STOP RUN.

<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。

RESULT = 9 + 1
print(RESULT)

[いつもの文言]

まだ行けそうです。分岐処理はどうでしょうか。

<質問>
以下のCOBOLのコードをPythonに翻訳してください。

    *---1---------2---------3---------4---------5
       IDENTIFICATION         DIVISION.
       PROGRAM-ID.            SAMPLE.
      *
       ENVIRONMENT            DIVISION.
      *
       DATA                   DIVISION.
       WORKING-STORAGE        SECTION.
       01  CNST               PIC 9(01)
                                VALUE 1.
      *
       PROCEDURE              DIVISION.
       MAIN                   SECTION.
       MAIN-S.
         EVALUATE  CNST
           WHEN    1
             DISPLAY          'HOGE'
           WHEN    2
             DISPLAY          'FOO'
           WHEN    OTHER
             DISPLAY          'BAR'
         END-EVALUATE.
       MAIN-E.
         STOP RUN.

<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。

CNST = 1
if CNST == 1:
    print('HOGE') 
elif CNST == 2:
    print('FOO') 
else:
    print('BAR')

[いつもの文言]

では関数は?

<質問>
以下のCOBOLのコードをPythonに翻訳してください。

      *---1---------2---------3---------4---------5
       IDENTIFICATION         DIVISION.
       PROGRAM-ID.            SAMPLE.
      *
       ENVIRONMENT            DIVISION.
      *
       DATA                   DIVISION.
       WORKING-STORAGE        SECTION.
      *
       PROCEDURE              DIVISION.
      *--メインセクション
       MAIN                   SECTION.
       MAIN-S.
         PERFORM              SUB.
       MAIN-E.
         STOP RUN.
      *--サブセクション
       SUB                    SECTION.
       SUB-S.
         DISPLAY              'HELLO WORLD'.
       SUB-E.
         EXIT.

<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。

def SUB():
    print('HELLO WORLD') 
SUB()

[いつもの文言]

関数もできましたね。では最後にループ処理をみてみます。

<質問>
以下のCOBOLのコードをPythonに翻訳してください。

      *---1---------2---------3---------4---------5
       IDENTIFICATION         DIVISION.
       PROGRAM-ID.            SAMPLE.
      *
       ENVIRONMENT            DIVISION.
      *
       DATA                   DIVISION.
       WORKING-STORAGE        SECTION.
       01  CNT                PIC 9(02)
                                VALUE 0.
      *
       PROCEDURE              DIVISION.
      *--メインセクション
       MAIN                   SECTION.
       MAIN-S.
         DISPLAY              CNT.
      *--キホウ1ノループ
         PERFORM              SUB
           UNTIL              CNT = 10.
         DISPLAY              CNT.
      *--キホウ2ノループ
         PERFORM
           UNTIL              CNT = 20
             COMPUTE          CNT = CNT + 1
         END-PERFORM.
         DISPLAY              CNT.
       MAIN-E.
         STOP RUN.
      *--サブセクション
       SUB                    SECTION.
       SUB-S.
         COMPUTE              CNT = CNT + 1.
       SUB-E.
         EXIT.

<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。

CNT = 0
print(CNT)
while CNT < 10:
    CNT += 1
print(CNT)
CNT = 0
while CNT < 20:
    CNT += 1
print(CNT)

[いつもの文言]

基本的なものであれば、無料の Bing AI でもそこそこ翻訳できそうですね。
ただ本当に知らない人だと回答が間違っていても気づけないので、使っている間は技術者が必要になるかなと思いました。
今後のことを考えると移行の大変さはあると思いますが、技術者がいなくなる可能性もあるので移行を検討してもいいのかなと思いました。(もう始めてるのかもしれませんが。)

いいなと思ったら応援しよう!

この記事が参加している募集