~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 3458CD1573CEE771C40AD791F03E9C15__1702199280 ✰
Заголовок документа оригинал.:
✰ Code generation (compiler) - Wikipedia ✰
Заголовок документа перевод.:
✰ Генерация кода (компилятор) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Code_generation_(compiler) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/34/15/3458cd1573cee771c40ad791f03e9c15.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/34/15/3458cd1573cee771c40ad791f03e9c15__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:16:03 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 10 December 2023, at 12:08 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Генерация кода (компилятор) — Википедия Jump to content

Генерация кода (компилятор)

Из Википедии, бесплатной энциклопедии

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

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

Входные данные генератора кода обычно представляют собой дерево синтаксического анализа или абстрактное синтаксическое дерево . [1] Дерево преобразуется в линейную последовательность инструкций, обычно на промежуточном языке, таком как трехадресный код . Дальнейшие этапы компиляции могут называться «генерацией кода», а могут и не называться, в зависимости от того, предполагают ли они значительные изменения в представлении программы. (Например, этап оптимизации «глазка» вряд ли будет называться «генерацией кода», хотя генератор кода может включать в себя этап оптимизации «глазка».)

Основные задачи [ править ]

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

Задачи, которые обычно являются частью фазы «генерации кода» сложного компилятора, включают:

Выбор инструкций обычно выполняется путем рекурсивного обхода в обратном порядке абстрактного синтаксического дерева, сопоставляя определенные конфигурации дерева с шаблонами; например, дерево W := ADD(X,MUL(Y,Z)) может быть преобразовано в линейную последовательность инструкций путем рекурсивной генерации последовательностей для t1 := X и t2 := MUL(Y,Z), а затем выдать инструкцию ADD W, t1, t2.

В компиляторе, использующем промежуточный язык, может быть два этапа выбора инструкций: один для преобразования дерева синтаксического анализа в промежуточный код, а второй этап, намного более поздний, для преобразования промежуточного кода в инструкции из набора команд целевой машины. Этот второй этап не требует обхода дерева; это можно сделать линейно и обычно включает в себя простую замену операций промежуточного языка соответствующими кодами операций . Однако если компилятор на самом деле является транслятором языка (например, конвертирующим Java в C++ ), то второй этап генерации кода может включать в себя построение дерева из линейного промежуточного кода.

Генерация кода во время выполнения [ править ]

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

Связанные понятия [ править ]

Фундаментальную задачу приема входных данных на одном языке и получения результатов на нетривиально другом языке можно понять с точки зрения основных трансформационных операций теории формального языка . Следовательно, некоторые методы, которые изначально были разработаны для использования в компиляторах, стали использоваться и другими способами. Например, YACC (Еще один компилятор-компилятор в форме Бэкуса-Наура и преобразует их в синтаксический анализатор на C. ) принимает входные данные Хотя изначально yacc был создан для автоматической генерации парсера для компилятора, он также часто используется для автоматизации написания кода, который необходимо модифицировать каждый раз при изменении спецификаций. [3]

Многие интегрированные среды разработки (IDE) поддерживают ту или иную форму автоматической генерации исходного кода , часто используя алгоритмы, общие с генераторами кода компилятора, хотя обычно менее сложные. (См. также: Преобразование программ , Преобразование данных .)

Отражение [ править ]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Стивен Мучник; Мучник и партнеры (15 августа 1997 г.). Расширенная реализация проекта компилятора . Морган Кауфманн. ISBN  978-1-55860-320-2 . генерация кода.
  2. ^ Ахо, Альфред В.; Рави Сетхи; Джеффри Д. Уллман (1987). Составители: принципы, методы и инструменты . Аддисон-Уэсли. п. 15. ISBN  0-201-10088-6 .
  3. ^ Генерация кода: настоящий урок Rails . Artima.com (16 марта 2006 г.). Проверено 10 августа 2013 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 3458CD1573CEE771C40AD791F03E9C15__1702199280
URL1:https://en.wikipedia.org/wiki/Code_generation_(compiler)
Заголовок, (Title) документа по адресу, URL1:
Code generation (compiler) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)