Предварительная обработка 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.