Действительно необходимо взвесить худший сценарий случая кого-то получающего те адреса электронной почты, вероятность кого-то получающего их и дополнительное усилие/время, необходимое к impliement изменение.
Хотя вы можете использовать параметры -fdump-tree-all
и -fdump-rtl-all
в gcc, я не думайте, что их вывод очень полезен для изучающего компилятор. FWIW, я начал работать над gcc как часть моей докторской диссертации, уже завершив два курса бакалавриата, и обнаружил, что gcc
и его файлы отладки непрозрачны и трудны для понимания.
Кроме того, gcc на самом деле не соответствует дизайну компиляторов из учебников. На самом деле никто этого не делает, потому что это плохо работает. Я почти уверен, что gcc не создает дерево синтаксического анализа или дерево абстрактного синтаксиса. Он действительно создает IR (называемый gimple) для выполнения своих высокоуровневых оптимизаций.
Я бы посоветовал попробовать вместо этого LLVM, который имеет репутацию хорошо спроектированного и простого в использовании. Другой альтернативой является загрузка кода из учебника, особенно из книги Appel, при условии, что он доступен.
Еще одно предложение, если я могу на мгновение порекомендовать свой собственный, - это использовать phc . С помощью phc вы можете видеть дерево синтаксического анализа как изображение и просматривать AST и исходный код после каждого прохода в компиляторе. Вот сравнение частей AST и дерева синтаксического анализа . Они генерируются тривиально с помощью phc. Вы можете увидеть IR компилятора, CFG, форму SSA и отладочные данные вывода типа и анализа псевдонимов. Вы также можете включать и выключать оптимизацию и передачи, чтобы увидеть эффект, который они дают.
Думаю, это может быть полезно для вас.
Вы можете увидеть вывод препроцессора с помощью -E
. -fdump-tree - *
выгружает внутреннее представление дерева, например -fdump-tree-all
. Существуют различные опции -d
для создания дампа промежуточных представлений RTL, например -fdump-rtl-all
(см. Руководство для индиуальных проходов, которые вы получаете дампы); кроме того, -dD
сбрасывает все определения макросов.