Язык Си очень сложный и написать его нормальную реализацию - весьма нетривиальная задача.
При написании фронтенда встаёт задача во-первых правильно его распарсить. А с точки зрения построения парсера, Си далеко не самый простой язык. Готовой BNF грамматики для него Вы не найдёте. Плюс необходимо поддерживать пол десятка разных стандартов.
Далее нужно продумать что и как ВЫ будете отдавать в мидленд. Т.е. нужно спроектировать представление, с которым будет удобно работать оптимизациям, которое будет отображать как можно больше особенностей языка, но при этом не будет слишком сложным.
Нужно сделать обработку и вывод ошибок. Например в edg (промышленный фронтенд) разных сообщений об ошибках 2500.