С каким языком они создают другие языки?

Какой язык используется для создания низкоуровневых языков как C++ и Java?

Как Вы могли создать первый язык без языка?

25
задан APC 10 January 2010 в 05:57
поделиться

8 ответов

Я бы сказал, что APC или Memcached являются хорошим выбором.

-121--4144631-

В контексте компиляторов эта операция часто называется загрузка . В частности, см. Раздел «Куриное и яйцо-проблема» для прямого ответа на ваш вопрос.

Очень Сначала компилятор был бы вручную написан на языке сборки. Если ваш следующий вопрос: «Как был написан первый ассемблер?» Затем ответ заключался в том, что первый ассемблер был написан вручную в бинарном машинном коде, возможно, с помощью передних панелей тумблерных переключателей . Это, несомненно, упрощение того, что действительно произошло, но концепция одинакова.

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

32
ответ дан 28 November 2019 в 18:25
поделиться

Таких нет вещь как "без языка". Центральный процессор обрабатывает серию сигналов, которые мы называем битами или единицами и нулями (технически изменения в потоке электрического тока). В 50-е годы кодирование выполнялось непосредственно в том виде, в котором ЦП мог «понимать», и скорость, с которой выполнялось программирование, составляла до 20 команд ассемблера в день.

1
ответ дан 28 November 2019 в 18:25
поделиться

Обычно еще одна машина или другой язык используются для записи первого ассемблера и первого компилятора.

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

  1. Напишите целевой язык x для компьютера Y y Z Z на компьютере (URK) A .

  2. Напишите целевой язык x для компьютера Y на языке x . Сейчас один компиляция на A будет производить переводчик, который может работать на y , а вторым компилированием может быть затем Y с полностью загрузочной системой.

Проблема становится проще, если языки или машины не отличаются.

Загрузка также может быть выполнена постепенно, и, возможно, это было более распространенным 50 лет назад.

  • Написать более мощную виртуальную машину (возможно стека машины или что-то с строками) в машинном коде
  • Теперь, запись в байтекоде VM, напишите что-нибудь ближе к языку

Что-то вроде может сделать хороший промежуточный шаг.

0
ответ дан 28 November 2019 в 18:25
поделиться

Большая часть такого рода вещь сделана в C.

Первый компилятор C не был написан в C; Это был ассемблер PDP-11. Другие начальные компиляторы C были написаны на различных языках ассемблера.

Но все последующие компиляторы C фактически записываются в C, основанные на раннем «портативном компиляторе C». Да, это круговой. Но компилятор версии X можно использовать для создания компилятора версии X + 1.

6
ответ дан 28 November 2019 в 18:25
поделиться

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

Однако есть некоторые языки, которые были специально разработаны для написания компьютерных языков - а именно LEX, YACC, Flex, Bison (обновленные версии LEX и YACC). Они позволяют представить лексику и грамматическую спецификацию некоторых языков (я верю LLR, или LALR) в форме, которая может быть скомпилирована в эффективное распознавание языка.

Вам все еще нужно писать другие части языкового компилятора / интерпретатора самостоятельно, то есть семантический анализ, генерация кода.

См.

http://dinosaur.compilertools.net/

1
ответ дан 28 November 2019 в 18:25
поделиться

Есть пара параметров, вы можете реализовать весь язык на языке, доступной на целевом хосте, как C или OCAML, что бы это ни было. После того, как у вас есть эта реализация, вы можете написать компилятор / интерпретатор на самом языке, построить его, и теперь язык работает. Этот процесс называется « загрузка ».

3
ответ дан 28 November 2019 в 18:25
поделиться

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

Первый самообедующий компилятор - способен набирать свой собственный источник код на языке высокого уровня - был создан для Lisp ... с 1970-х годов Это стало обычной практикой к внедрить компилятор на языке он компилируется, хотя и паскаль, так и C были популярными вариантами для Язык реализации. http://en.wikipedia.org/wiki/Compiler

14
ответ дан 28 November 2019 в 18:25
поделиться

Я думаю, что ключевое понимание вашего вопроса является понятие обвязки загрузки . Ссылка описывает, как язык может составить язык.

Это относительно распространено в сообществе Lisp. например Некоторые университетские классы будут использовать схему , чтобы написать подмножество языка (это не активность класса компилятора).

Это сказано, что многие компиляторы написаны на других языках. Например, мопсы (Perl 6) написано в Haskell. Ruby доступен в C или Java (AS JRUBY ).

4
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: