web-dev-qa-db-ja.com

コンパイラーをCOBOLで作成することは可能ですか?

このブログ投稿 https://stackoverflow.blog/2020/04/20/brush-up-your-cobol-why-is-a-60-year-old-language-suddenly-in-demand/? cb = 1 は言う

「COBOLでコンパイラやカーネルモジュールを作成することはできません」

私はCOBOLのファンではありませんし、それが良い考えであることを示唆していませんが、COBOLはチューリングコンプリートであるため、他のチューリングコンプリート言語で実行できるすべてのプログラムを書き込めるはずです。書く。つまり、理論的にはCOBOLでコンパイラを書くことができるべきでしょう(いいえ)。

おそらく、作者はCOBOLでコンパイラーを作成することは通常ではない、または良い考えではないと単に言っているだけですが、不思議に思いました。

6
Caltor

さて、実際の作者として、私はそれが過度に単純化したことを認めます。COBOLはチューリング完全であり、したがって、最終的にはすべてのプログラムを記述できるという単純な理由からです。たとえば、COBOLでアセンブラーを作成し、アセンブラーを使用してCコンパイラーを作成してから、bootstrap CでCコンパイラーを作成することができます。カーネルのロード可能なモジュールでも同様です。最終的には。

それはwaaaaayがあまりにも多くの時間を手にしている人に適したクレイジーなアプローチですが、それは可能です。

2
Charlie Martin

https://rosettacode.org/wiki/Compiler/AST_interpreter#COBOL で実装を確認できます

Steve Williamsが一連のCOBOLエントリとして作成したコンパイラタスクスイートソリューションの残りの部分をご覧ください。

彼はすべてのステップを

  • 字句解析タスク
  • 構文アナライザータスク
  • コードジェネレータータスク
  • 仮想マシンインタープリタータスク
  • ASTインタープリタータスク

ミニCコンパイラ、インタープリター、VM。魅力を発揮します。言語文法については https://rosettacode.org/wiki/Compiler/syntax_analyzer を参照してください。割り当て、文字列、while、if、print、putc、数式、比較。波状ブレースブロック。 コンパイラタスクスイートがRosettaコードのスイートスポットであると確信しています

テストサンプルは

count = 1;
 while (count < 10) {
     print("count is: ", count, "\n");
     count = count + 1;
 }

COBOLソースはすべて、GnuCOBOLでビルドされたときに宣伝どおりに機能します。コンパイルまたは解釈された、管理および拡張が容易なプログラミング言語が得られます。 Rosetta Codeに記載されているさまざまなソリューションは、読んで試してみる価値があります。

2
Brian Tiffin