~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 08661F12819B18B348A1729985D4C210__1698497460 ✰
Заголовок документа оригинал.:
✰ Preprocessor - Wikipedia ✰
Заголовок документа перевод.:
✰ Препроцессор — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Preprocessor ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/08/10/08661f12819b18b348a1729985d4c210.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/08/10/08661f12819b18b348a1729985d4c210__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:26:01 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 28 October 2023, at 15:51 (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] это программа , которая обрабатывает входные данные для получения выходных данных, которые используются в качестве входных данных в другой программе. Выходные данные называются предварительно обработанной формой входных данных, которая часто используется некоторыми последующими программами, такими как компиляторы . Объем и вид выполняемой обработки зависят от характера препроцессора; некоторые препроцессоры способны выполнять лишь относительно простые текстовые замены и расширения макросов , в то время как другие обладают возможностями полноценных языков программирования .

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

Лексические препроцессоры [ править ]

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

Препроцессор C [ править ]

Наиболее распространенным примером этого является препроцессор C , который принимает строки, начинающиеся с '#', в качестве директив . Препроцессор C не ожидает, что его входные данные будут использовать синтаксис языка C. Некоторые языки используют другой подход и используют встроенные функции языка для достижения аналогичных целей. Например:

  • Вместо макросов некоторые языки используют агрессивную встраивание и шаблоны.
  • Вместо включений в некоторых языках используется импорт во время компиляции, основанный на информации о типе в объектном коде.
  • Некоторые языки используют if-then-else и устранение мертвого кода для достижения условной компиляции .

Другие лексические препроцессоры [ править ]

общего назначения Другие лексические препроцессоры включают m4 , наиболее часто используемый в кроссплатформенных системах сборки, таких как autoconf , и GEMA , макропроцессор с открытым исходным кодом, который работает с шаблонами контекста.

Синтаксические препроцессоры [ править ]

Синтаксические препроцессоры были представлены в Lisp семействе языков . Их роль заключается в преобразовании синтаксических деревьев в соответствии с рядом определяемых пользователем правил. Для некоторых языков программирования правила написаны на том же языке, что и программа (отражение во время компиляции). Это относится к Lisp и OCaml . Некоторые другие языки полагаются на полностью внешний язык для определения преобразований, например препроцессор XSLT для XML или его статически типизированный аналог CDuce .

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

Настройка синтаксиса [ править ]

Хорошим примером настройки синтаксиса является существование двух разных синтаксисов в языке программирования Objective Caml . [2] Программы могут быть написаны как с «обычным синтаксисом», так и с «пересмотренным синтаксисом», и по запросу могут быть красиво напечатаны с использованием любого из синтаксисов.

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

Расширение языка [ править ]

Лучшие примеры расширения языка с помощью макросов можно найти в Лисп семействе языков . Хотя языки сами по себе представляют собой простые динамически типизированные функциональные ядра, стандартные дистрибутивы Scheme или Common Lisp допускают императивное или объектно-ориентированное программирование, а также статическую типизацию. Почти все эти функции реализуются посредством синтаксической предварительной обработки, хотя следует отметить, что фаза компиляции «расширения макроса» обрабатывается компилятором в Lisp. Это по-прежнему можно считать формой предварительной обработки, поскольку она происходит перед другими этапами компиляции.

Специализация языка [ править ]

Одной из необычных особенностей семейства языков Lisp является возможность использования макросов для создания внутреннего DSL. Как правило, в большом проекте, основанном на Lisp , модуль может быть написан на множестве таких мини-языков : один, возможно, использует , основанный на SQL диалект Lisp , другой написан на диалекте, специализированном для графических интерфейсов или красивой печати, и т. д. Common Lisp Стандартная библиотека содержит пример этого уровня синтаксической абстракции в виде макроса LOOP, который реализует мини-язык типа Algol для описания сложных итераций, в то же время позволяя использовать стандартные операторы Lisp.

Препроцессор/язык MetaOCaml предоставляет аналогичные функции для внешних DSL. Этот препроцессор берет описание семантики языка (т. е. интерпретатора) и, комбинируя интерпретацию во время компиляции и генерацию кода, превращает это определение в компилятор языка программирования OCaml , а из этого языка либо в байт-код, либо в родной код.

Препроцессор общего назначения [ править ]

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

M4, вероятно, является наиболее известным примером такого препроцессора общего назначения, хотя препроцессор C иногда используется в роли, не специфичной для C. Примеры:

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

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

  1. ^ «Что такое прекомпилятор?» .
  2. ^ Пересмотренный синтаксис с веб-сайта языка Caml.
  3. ^ Покажите, как использовать препроцессор C для файлов JavaScript. «JavaScript — это не промышленная мощь», Т. Снайдер .
  4. ^ «Препроцессор C в Javascript?» . режим эспрессо .
  5. ^ «Kernel/Git/Stable/Linux.git — дерево стабильных версий ядра Linux» .
  6. ^ Покажите, как использовать C-препроцессор в качестве механизма шаблонов . «Использование препроцессора C в качестве инструмента разработки HTML», Дж. Корпела , 2000 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 08661F12819B18B348A1729985D4C210__1698497460
URL1:https://en.wikipedia.org/wiki/Preprocessor
Заголовок, (Title) документа по адресу, URL1:
Preprocessor - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)