Предварительная обработка C99 орграфов прочь

Есть ли способ "предварительной обработки" орграфов в стиле C99 для получения файла C (или .i предварительно обработанный источник) такой, что результирующий файл не содержит никаких орграфов?

Например, учитывая следующий исходный код:

%:define N 5

int main() <%
  int a<:N:> = <%2,1,0%>;
  char *s = "a<:b";
  return a<:4:>;
%>

Использование опции препроцессора GCC (-Eплюс -dD для хорошей меры) достаточно, чтобы избавиться от %: орграф (который оценивается и перепечатывается как #define в этом примере), но не другие.

Clang ведет себя так же, так что это не сильно помогает.

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

1 ответ

Решение

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

Было бы относительно просто написать такой процессор, используя flexначиная с существующего гибкого определения для C.

Другие вопросы по тегам