Язык программирования и компилятор

Проверьте это От Apple Desicion на APP. alt text

7
задан seg.server.fault 23 July 2009 в 18:55
поделиться

6 ответов

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

Вот как он работает.

Edit: Чтобы уточнить, комментарии к этому ответу также верны. Компилятор НЕ ДОЛЖЕН быть написан на новом языке, если вы этого не хотите. Как уже говорилось, некоторые не идут по этому пути и придерживаются исходного языка реализации.

5
ответ дан 7 December 2019 в 01:25
поделиться

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

2
ответ дан 7 December 2019 в 01:25
поделиться

Сердце любого языка - это компоновщик и компилятор, компилятор, который преобразует исходный код в промежуточный, очень близкий к машинному коду, код. С этого момента компоновщики используются для присоединения его к другим двоичным файлам, таким как библиотеки и т. Д. После того, как двоичные файлы связаны со всеми логическими частями, они становятся исполняемым файлом в машинном коде (или переводимым промежуточным кодом, как в .NET / Java. ).

Самый большой перевод с «человеческого» английского происходит в компиляторе, и есть отличные статьи о том, как это делается ... но по большей части это относится к сфере сверхъестественного, так как организационные навыки, необходимые для написания рабочий компилятор огромен.

Вы можете увидеть виды переводов на поверхностном уровне и поближе познакомиться с тем, как работают компиляторы, просмотрев определения языков (Бьярн Страуструп '

1
ответ дан 7 December 2019 в 01:25
поделиться

Вы можете прочитать о проектировании языков программирования и компилятора:

http://dragonbook.stanford.edu/
Самозагрузка (компиляторы)
http: / /en.wikipedia.org/wiki/Programming_language
http://www.paulgraham.com/langdes.html

Или пройдите один или три курса в местном университете.

1
ответ дан 7 December 2019 в 01:25
поделиться

Язык (обычно) не что иное, как спецификация. Компилятор или интерпретатор языка может быть написан на любом языке по вашему выбору. Первые были в машинном коде, так как это все, что у нас было. Затем пришел ассемблер, затем другие языки, такие как C. С тех пор C (и C ++) оставались популярными вариантами реализации языка. Однако C и C ++ - это единственные варианты.

Также стоит отметить, что часто язык может быть реализован с помощью специального языка (или языков), таких как yacc и lex. Это предметно-ориентированные языки, специально разработанные для упрощения создания компиляторов на основе спецификации. Это избавляет от утомительного ручного кодирования множества вещей, которые могут быть легко сгенерированы компьютером. Вы берете спецификацию, прогоняете ее с помощью этих инструментов, и выдает код для реализации вашего языка. Yacc означает еще один компилятор-компилятор. Он компилирует спецификации для компилятора и генерирует компилятор.

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

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

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

0
ответ дан 7 December 2019 в 01:25
поделиться

Отличный вопрос!

  • Иногда компилятор для нового языка пишется на старом языке.

  • Если компилятор для нового языка N написан в N , существует множество стратегий, каждая из которых включает поиск способа запуска программы на языке N , когда у вас еще нет компилятора.

    1. Напишите интерпретатор для языка N , скажем, на C (на самом деле язык по вашему выбору), а затем использовать интерпретатор для интерпретации компилятора, компилирующего себя.

      • Напишите действительно ужасный компилятор для N , скажем, на C, затем используйте это для компиляции первой версии компилятора.

      • Скомпилируйте первую версию компилятора в код ассемблера или C, обычно вручную.

Моя любимая стратегия №1 , но все они работают.

Если вы хотите, чтобы решение этой проблемы было подробно объяснено, посмотрите короткую статью Эндрю Аппеля. Axiomatic Bootstrapping: A Guide for Compiler Hackers , бесплатно с веб-сайта Принстона. Эта статья очень математична, но в разделе связанных работ вы найдете ссылки на более старые статьи, в том числе те, которые демонстрируют процесс начальной загрузки с использованием T-диаграмм, которые многие люди находят очень интуитивно понятными.

1
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

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