Можно ли написать компилятор на языке COBOL? - PullRequest
5 голосов
/ 21 апреля 2020

Это сообщение в блоге https://stackoverflow.blog/2020/04/20/brush-up-your-cobol-why-is-a-60-year-old-language-suddenly-in-demand/?cb=1 говорит

"Вы не можете написать компилятор или модуль ядра на языке COBOL"

I Я не фанат COBOL, и я не предполагаю, что это было бы хорошей идеей, но, поскольку COBOL завершен по турингу, я понимаю, что вы должны быть в состоянии написать в нем любую программу, которую может написать любой другой язык, полный по тюрингу , Что означает, что должно теоретически быть возможным для написания компилятора на языке COBOL, не так ли?

Возможно, автор всего лишь краткий рассказ о том, что это не обычный или хорошая идея написать компилятор в Кобол, но это заставило меня задуматься.

Ответы [ 4 ]

7 голосов
/ 21 апреля 2020

Micro Focus был основан в 1976 году. Их первый компилятор COBOL загружался с использованием SNOBOL до тех пор, пока у них не был написан компилятор COBOL на языке COBOL. Даже утилиты были написаны и скомпилированы с COBOL. Позже они начали включать C и C ++, но какое-то время все было на COBOL. [Я использовал Micro Focus COBOL на ПК начиная с 1984 года.]

Проще говоря, стандартная программа COBOL может быть написана для чтения и записи файлов по одному байту за раз. То, что происходит в PROCEDURE DIVISION, определяет тип программы: редактор, компилятор, компоновщик и т. Д. c.

6 голосов
/ 21 апреля 2020

Что не получило ответа, так это то, что вы можете написать (ОС) кернал на языке COBOL.

Ответ (барабанная дробь ...)

Конечно , в том же смысле вы можете написать ядро ​​ОС на C. См. Мою статью Quora о том, что нужно для этого: Можно ли написать ядро ​​операционной системы без использования языка ассемблера? (Нет, я не собираюсь копировать весь этот ответ здесь).

Скорее всего, вас сочтут сумасшедшим.

2 голосов
/ 27 апреля 2020

Хорошо, как фактический автор, я признаю, что это было упрощение, по той простой причине, что COBOL завершен по Тьюрингу, и, таким образом, вы можете написать ЛЮБУЮ программу в нем - в конце концов. Например, вы можете написать ассемблер на языке COBOL, использовать ассемблер для написания C компилятора, а затем bootstrap a C компилятора в C. То же самое относится к загружаемым модулям ядра. В конце концов.

Это был бы сумасшедший подход, подходящий для кого-то, у кого waaaaay слишком много времени, но это можно сделать.

1 голос
/ 01 мая 2020

Вы можете увидеть реализацию в https://rosettacode.org/wiki/Compiler/AST_interpreter#COBOL

Познакомьтесь с остальными решениями набора задач компилятора, которые Стив Уильямс записал как набор записей COBOL.

Он выполнил все шаги в задаче

  • Лексический анализатор
  • Задача синтаксического анализатора
  • Задача генератора кода
  • Задача интерпретатора виртуальной машины
  • AST Задача интерпретатора

Компилятор mini C, интерпретатор, VM. Работает шарм. См. https://rosettacode.org/wiki/Compiler/syntax_analyzer для грамматики языка. Назначение, строки, в то время как, если, печать, положить c, математические выражения и сравнения. Squiggly скобки блоков. Я почти уверен, что набор задач компилятора - это лучшее место для Rosetta Code.

Пример тестирования:

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

Все источники COBOL работают так, как было объявлено при сборке. с GnuCOBOL. Вы получаете простой в управлении и расширении язык программирования, скомпилированный или интерпретированный. Различные решения, перечисленные в Rosetta Code, стоят времени, потраченного на чтение и испытание.

...