Если вы действительно хотите сделать это, это не будет возможно без реализации синтаксического анализатора языка, и даже тогда я не уверен, каким будет соглашение о кодировании для некоторых случаев в ваш "новый язык, который выглядит как C, но не имеет фигурных скобок". Например, возьмите следующий код C:
struct a {
int i;
};
int main(void) {
...
}
Вы можете написать это как
struct a
int i
int main(void)
...
Но его нужно преобразовать в исходный код, а не:
struct a {
int i;
} /* Note the missing semicolon! */
int main(void) {
...
}
Также, учитывая фрагменты ниже:
/* declare b of type struct a */
struct a {
int i;
} b;
/* a struct typedef */
typedef struct a {
int i;
} b;
Как вы собираетесь указать их на своем языке?
Вы, похоже, не хотите использовать точки с запятой в вашем языке. Это немного ограничивает ваш код и усложняет инструмент преобразования, потому что вы не можете иметь строки продолжения без дополнительных усилий:
i = j +
k;
является допустимым C, но
i = j + ;
k;
нет.
Итак, во-первых, вам нужно более точно определить грамматику вашего "бесстрастного C". Как уже говорили другие, подобные вещи чреваты опасностью.