cpphs-hugs - Интернет в облаке

Это команда cpphs-hugs, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


cpphs - либерализованный препроцессор типа cpp-a для Haskell

СИНТАКСИС


cpphs [ИМЯ ФАЙЛА|ВАРИАНТ] ...

ОПИСАНИЕ


cpphs является либерализованным повторным внедрением CPP (1) препроцессор C, в и для
Хаскелл.

Зачем заново внедрять cpp? Верно или нет, но препроцессор C широко используется в Haskell.
исходный код. Позволяет условную компиляцию для разных компиляторов, разных
версии одного и того же компилятора и разные платформы ОС. Также иногда используется
для своего макроязыка, который может включать определенные формы специфичных для платформы деталей -
заполнение, такое как утомительная шаблонная генерация определений экземпляров и FFI
декларации. Однако с cpp есть две проблемы, помимо очевидной эстетики.
из них:

Для некоторых систем Haskell, особенно Hugs в Windows, настоящий cpp недоступен для
по умолчанию.

Даже для других систем Haskell общий cpp, предоставляемый серией gcc 3.x
тонко меняется, что несовместимо с синтаксисом Haskell. Там есть
всегда были проблемы, например, с пробелами в строке и простыми символами в
идентификаторы. Эти проблемы будут только усугубляться.

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

cpphs в значительной степени полнофункциональный и совместим с -традиционный стиль cpp.
Имеет два режима:

только условная компиляция (--номакро),

и полное расширение макроса (по умолчанию).

In --номакро Режим, cpphs выполняет только действия условной компиляции, т.е. #включают«S,
#еслии #ифдефобрабатываются в соответствии с определениями замены текста (обе команды -
строка и внутренняя), но параметризованное раскрытие макроса не выполняется. В полном объеме
режим совместимости (по умолчанию), текстовые замены и расширения макросов также
обрабатывается в оставшейся части текста, отличного от cpp.

Рабочие особенности:

#ифдеф простая условная компиляция

#если полный логический язык определенных (), &&, ||, == и т. д.

#элиф связанные условные выражения

#define
встроенные определения (замены текста и макросы)

#ундеф оперативный отзыв определений

#включают
включение файла

#линия директивы номеров строк

\n продолжения строк во всех # директивах

/ ** / цепочка токенов в макроопределении

## Связь токенов в стиле ANSI

# Стрингизация токенов в стиле ANSI

__ФАЙЛ__
специальная замена текста для сообщений об ошибках DIY

__ЛИНИЯ__
специальная замена текста для сообщений об ошибках DIY

__ДАТА__
специальная замена текста

__ВРЕМЯ__
специальная замена текста

Макрорасширение является рекурсивным. Переопределение имени макроса не вызывает предупреждения.
Макросы можно определить в командной строке с помощью -D точно так же, как текстовые замены. Макрос
имена могут быть идентификаторами Haskell, например, с штрихом `и обратным апострофом ´
символы, которые немного свободнее, чем в C, но они все равно могут не включать оператор
символы.

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

Любые синтаксические ошибки в директивах cpp выдают сообщение на stderr и останавливают программу.
Неспособность найти файл # include'd выдает предупреждение для stderr, но обработка продолжается.

Вы можете указать любое количество имен файлов в командной строке. Результаты привязаны к
стандартный вывод.

-Dсим определить текстовую замену (значение по умолчанию - 1)

-Dsym =волна
определить текстовую замену с определенным значением

-Iпуть добавить каталог в путь поиска для # include

-Oфайл указать файл для вывода (по умолчанию stdout)

--номакро
обрабатывать только # ifdef и # include,
не раскрывать макросы

- нолайн
удалить # строчные отбросы из вывода

--полоска
конвертировать комментарии в стиле C в пробелы, даже за их пределами
директивы cpp

- хэш
распознают оператор строкового преобразования ANSI # и ## для
цепочка токенов в макросах

--текст обрабатывать ввод как простой текст, а не код Haskell

--макет
сохранять символы новой строки в расширениях макросов

- не горит
удалить комментарии в грамотном стиле

--версия
сообщить номер версии cpphs и остановить

По умолчанию НЕТ текстовых замен. (Нормальный cpp обычно имеет определения
для машины, ОС и т. д. Их можно легко добавить в исходный код cpphs, если хотите.)
Путь поиска ищется в порядке -I варианты, за исключением того, что каталог
сначала выполняется поиск вызывающего файла, а затем текущего каталога. Опять же, нет
путь поиска по умолчанию (и, опять же, это можно легко изменить).

РАЗЛИЧИЯ от CPP


Как правило, cpphs основывается на -традиционный поведение, а не ANSI C, и имеет
следующие основные отличия от стандартного cpp.

Общие

Команда # который вводит любую директиву cpp, должен быть в первом столбце строки (тогда как
ANSI разрешает пробелы перед # ).

Создает #линия n "имя файла"синтаксис, а не # n "имя файла"вариант.

Комментарии C удаляются только из директив cpp. Они не отделены от других
текст. Рассмотрим, например, что в Haskell все следующие допустимые операторы
символы: /* */ * / * Однако вы можете включить удаление C-комментария с помощью --полоска опцию.

Макрос язык

Принимает / ** / для вставки токена в определение макроса. Тем не мение, /* */ (с любым текстом
между комментарием открытия / закрытия) вставляет пробел.

ANSI ## Оператор вставки токена доступен с - хэш флаг. Это чтобы избежать
неверная интерпретация любого допустимого оператора Haskell с тем же именем.

Заменяет формальный параметр макроса на фактический, даже внутри строки (двойной или одиночный
цитируется). Это традиционное поведение, не поддерживаемое в ANSI.

Признает # оператор строковой обработки в определении макроса, только если вы используете - хэш
вариант. (Это дополнение ANSI, оно необходимо только потому, что цитируемая строка (см. Выше)
запрещено ANSI.)

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

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

Точно сохраняет пробелы в аргументах макроса (включая символы новой строки), но в начале
и конечное пространство исключается.

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

Используйте cpphs-hugs онлайн с помощью сервисов onworks.net



Новейшие онлайн-программы для Linux и Windows