Вот есть LLVM, который умеет генерить IR. И по сути этот IR мало чем отличается от языка C, только менее удобен для чтения человеком, но чуть более удобен для парсинга. В нем даже указатели и структуры есть.
Вопрос такой — не разумнее бы было генерить голый C (пусть даже сокращенную его версию) вместо IR?