Добавление C / C ++, как возможность предварительной обработки вашей программы - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть программа на C ++, которая обрабатывает входной файл.Я хочу добавить возможность предварительной обработки в мою программу.То есть входной файл выглядит следующим образом:

%pre-processing section
#include <some_parent_file>
#define x y
#ifdef 0
some useless text
#endif

%actual file-contents
... lots of text ...

Тогда моя программа должна автоматически включить текст из родительского файла, выполнить #define и другую предварительную обработку.Я мог бы использовать скрипт (с g ++ -E) перед вызовом моей программы, но я хотел бы иметь возможность делать это в моей программе, поскольку это обеспечивает большую гибкость.

Также "g ++ -E" примет директиву препроцессора, когда строки в разделе "фактическое содержимое файла" начинаются с хеша (g ++ -E не знает, что я хочу разделить свой код на2 раздела!).

Более того, если бы я мог использовать просто функциональность ifdef в разделе «фактическое содержимое файла», это было бы удивительно.Я встроил код C ++ в свою программу, чтобы использовать только те функции, которые мне нужны от возможности предварительной обработки компилятора gcc?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Как насчет библиотеки типа Wave или cpplib ?

1 голос
/ 01 декабря 2011

Простой возможностью было бы использовать popen для чтения из канала команд, который может быть cpp (или gcc -C -E) или m4.

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

Наконец, вы можете использовать обычные lexing и синтаксический анализ , возможно, с ANTLR и обрабатывать свои директивы include. Вы также можете использовать библиотеку для файлов конфигурации, например libconfig

0 голосов
/ 01 декабря 2011

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

...