Несмотря на то, что этот вопрос давно ушел, у меня есть для вас другой ответ.
Самый быстрый способ разбора - вообще не разбирать. А?! * * 1003
Под этим подразумевается, что статистически большая часть текста исходного кода, а также большая часть кода и данных, генерируемых из этого исходного кода, не изменяются от компиляции к компиляции.
Поэтому вы можете использовать технику, называемую пошаговой компиляцией. В первый раз, когда вы компилируете источник, вы делите его на крупнозернистые куски, например, на границах глобальных объявлений и функциональных тел. Вы должны сохранить источник чанков, их подписи или контрольные суммы, а также информацию о границах, к чему они были собраны и т. Д.
В следующий раз, когда вам придется перекомпилировать тот же исходный код, учитывая ту же среду, вы можете перейти к исходному коду в поисках изменений. Один простой способ - сравнить (длинное слово за раз) текущий код с сохраненным снимком кода, который вы сохранили с прошлого раза. Пока длинные слова совпадают, вы пропускаете источник; вместо синтаксического анализа и компиляции вы повторно используете результаты компиляции со снимками для этого раздела с прошлого раза.
Как видно в "C # '88", QuickC 2.0 и VC ++ 4.0, инкрементная перекомпиляция.
Счастливого взлома!