Ответ 1
Хотя вы можете использовать -fdump-tree-all
и -fdump-rtl-all
в gcc, я не думаю, что их вывод очень полезен для ученика-компилятора. FWIW, я начал работать над gcc как часть моих исследований PhD, уже закончил два курса бакалавриата, и я обнаружил, что gcc
и его файлы отладки непрозрачны и трудно следовать.
Кроме того, gcc действительно не соответствует учебному составу компиляторов. На самом деле никто не делает, потому что это плохо работает. Я уверен, что gcc не создает дерево синтаксиса или абстрактно-синтаксическое дерево. Он создает IR (называемый gimple), на котором выполняется оптимизация на высоком уровне.
Я бы предложил попробовать LLVM вместо этого, который имеет репутацию хорошо разработанного и легкого для подражания. Другой альтернативой является загрузка кода из учебника, особенно книги Аппеля, предполагая его доступность.
Еще одно предложение, если я могу порекомендовать свою собственную на мгновение, - это использовать phc. С помощью phc вы можете увидеть дерево разбора в виде изображения и просмотреть AST и исходный код после каждого прохода в компиляторе. Вот сравнение частей АСТ и дерева разбора. Они генерируются тривиально с помощью phc. Вы можете видеть компилятор IRs, CFG, форму SSA и отлаживать вывод вывода типа и анализа псевдонимов. Вы также можете включать и отключать оптимизацию и передавать, чтобы увидеть эффект, который у них есть.
Я думаю, это может быть полезно для вас.