Ну, что вы подразумеваете под написанием компилятора?
Я сомневаюсь, что кто-то создал настоящий компилятор C ++, который использовал его вплоть до ассемблера, но я использовал lex и yacc для создания компилятора C, и я сделал это без.
Используя оба, вы можете создать компилятор, который пропускает семантику за пару дней, но выяснение того, как их использовать, может занять несколько недель или месяцев. Чтобы понять, как сделать компилятор вообще, понадобятся недели или месяцы, несмотря ни на что, но я запомнил цифру, когда вы знаете, как он работает, это заняло несколько дней с lex и yacc и несколько недель без, но у второго были лучшие результаты и меньше ошибок, так что на самом деле сомнительно, стоит ли их вообще использовать.
«Семантика» - это фактическое производство кода. Это может быть очень простой код, которого достаточно для работы и который может совсем не занять много времени, или вы можете потратить всю свою жизнь на оптимизацию.
С C ++ большая проблема - шаблоны, но есть так много маленьких проблем и правил, что я не могу представить, чтобы кто-то когда-либо хотел это сделать. Даже если вы ДЕЙСТВИТЕЛЬНО закончите, проблема в том, что вы не обязательно будете иметь бинарную совместимость, то есть не сможете распознать компоновщик или ОС как исполняемую программу, потому что это нечто большее, чем просто C ++, и его сложно определить стандартно, но есть также еще больше стандартов для беспокойства, которые еще менее широко доступны.