Какие языковые функции требуются в языке программирования для создания компилятора? - PullRequest
8 голосов
/ 05 октября 2009

Языки программирования, похоже, проходят несколько этапов. Во-первых, кто-то придумывает новый язык Foo Language. Компилятор / интерпретатор написан на другом языке, обычно C или другом низкоуровневом языке. В какой-то момент FooL созревает и растет, и в конце концов кто-то где-то напишет компилятор и / или интерпретатор для FooL в самом FooL.

У меня такой вопрос: каково минимальное подмножество языковых функций, чтобы кто-то мог реализовать этот язык сам по себе?

Ответы [ 5 ]

7 голосов
/ 05 октября 2009

Компилятор может быть написан даже с использованием машины Тьюринга - Универсальной машины Тьюринга в основном является компилятором / интерпретатором любой машины Тьюринга, поэтому любой Turing-complete языка должно хватить :) 1007 *

4 голосов
/ 05 октября 2009

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

Однако, с практической точки зрения, вы не будете очень счастливы, пытаясь реализовать язык программирования на машине Тьюринга. Я бы сказал, что, как минимум, вы хотите иметь все обычные конструкции потока управления, примитивные типы данных, подпрограммы, а также массивы и структуры. Этого должно быть достаточно, чтобы вы могли реализовать это подмножество языка в самом языке - и затем вы можете начать с самого начала.

2 голосов
/ 05 октября 2009

Одной из опций является цикл чтения-проверки-печати . Это может быть использовано для построения многих высокоуровневых конструкций. Я полагаю, что это путь, по которому идет LISP.
Я не уверен относительно начала C, но я думаю, что он начался с нескольких системных вызовов для реализации ветвления, циклов, присваивания и односимвольного ввода-вывода и был построен оттуда.

0 голосов
/ 05 октября 2009

У меня такой вопрос: каково минимальное подмножество языковых функций, чтобы кто-то мог реализовать этот язык сам по себе?

Нет ли требования, чтобы язык был полезен для чего-либо кроме компиляции? Я представляю вам Useless, язык, на котором каждый текст является надлежащей программой и означает «программу, которая принимает любой ввод и производит себя» (это также называется Useless компилятор).

0 голосов
/ 05 октября 2009

Я предполагаю, что ассемблер сделает разрез.

...