Сколько времени потребуется, чтобы написать компилятор C ++ с использованием flex / yacc? - PullRequest
17 голосов
/ 25 декабря 2009

Сколько времени потребуется для написания компилятора C ++ с использованием lex / yacc?

С чего мне начать?

Ответы [ 13 ]

1 голос
/ 25 декабря 2009

Компилятор C ++ очень сложен. Чтобы реализовать достаточно C ++, чтобы быть совместимым с большинством кода C ++, понадобилось бы несколько разработчиков на полный рабочий день. clang - это проект компилятора, финансируемый Apple для разработки нового компилятора для C, C ++ и Objective-C с несколькими штатными разработчиками, а поддержка C ++ по-прежнему очень далек от завершения после нескольких лет разработки.

0 голосов
/ 27 декабря 2009

Ну, что вы подразумеваете под написанием компилятора?

Я сомневаюсь, что кто-то создал настоящий компилятор C ++, который использовал его вплоть до ассемблера, но я использовал lex и yacc для создания компилятора C, и я сделал это без.

Используя оба, вы можете создать компилятор, который пропускает семантику за пару дней, но выяснение того, как их использовать, может занять несколько недель или месяцев. Чтобы понять, как сделать компилятор вообще, понадобятся недели или месяцы, несмотря ни на что, но я запомнил цифру, когда вы знаете, как он работает, это заняло несколько дней с lex и yacc и несколько недель без, но у второго были лучшие результаты и меньше ошибок, так что на самом деле сомнительно, стоит ли их вообще использовать.

«Семантика» - это фактическое производство кода. Это может быть очень простой код, которого достаточно для работы и который может совсем не занять много времени, или вы можете потратить всю свою жизнь на оптимизацию.

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

0 голосов
/ 25 декабря 2009

Рекурсивный приличный - хороший выбор для разбора C ++. GCC и clang используют его.

Парсер Elsa (и мой компилятор ellcc) используют генератор компилятора Elkhound GLR.

В любом случае написание компилятора C ++ - БОЛЬШАЯ работа.

...