Интернет магазин китайских планшетных компьютеров



Компьютеры - Препроцессор - Синтаксические препроцессоры

22 января 2011


Оглавление:
1. Препроцессор
2. Лексические препроцессоры
3. Язык программирования PHP
4. Синтаксические препроцессоры
5. Макропроцессор общего назначения
6. Интересные факты



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

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

Модификация синтаксиса

Хороший пример модификации синтаксиса — существование двух различных вариантов синтаксиса в языке программирования Objective Caml. Программы можно писать используя обычный синтаксис или исправленный синтаксис, при этом выбор зависит от желания программиста.

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

Расширение языка

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

Аналогично, типобезопасные регулярные выражения или генерация кода могут быть добавлены в синтаксис и семантику OCaml при помощи макросов, например, микронити, монады или прозрачная обработка XML.

Специализированный язык

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

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



Просмотров: 4931


<<< Макропроцессор m4