Как я могу видеть дерево синтаксического анализа, промежуточный код, код оптимизации и ассемблерный код во время КОМПИЛЯЦИИ?

Действительно необходимо взвесить худший сценарий случая кого-то получающего те адреса электронной почты, вероятность кого-то получающего их и дополнительное усилие/время, необходимое к impliement изменение.

28
задан John Saunders 1 October 2009 в 20:52
поделиться

2 ответа

Хотя вы можете использовать параметры -fdump-tree-all и -fdump-rtl-all в gcc, я не думайте, что их вывод очень полезен для изучающего компилятор. FWIW, я начал работать над gcc как часть моей докторской диссертации, уже завершив два курса бакалавриата, и обнаружил, что gcc и его файлы отладки непрозрачны и трудны для понимания.

Кроме того, gcc на самом деле не соответствует дизайну компиляторов из учебников. На самом деле никто этого не делает, потому что это плохо работает. Я почти уверен, что gcc не создает дерево синтаксического анализа или дерево абстрактного синтаксиса. Он действительно создает IR (называемый gimple) для выполнения своих высокоуровневых оптимизаций.

Я бы посоветовал попробовать вместо этого LLVM, который имеет репутацию хорошо спроектированного и простого в использовании. Другой альтернативой является загрузка кода из учебника, особенно из книги Appel, при условии, что он доступен.

Еще одно предложение, если я могу на мгновение порекомендовать свой собственный, - это использовать phc . С помощью phc вы можете видеть дерево синтаксического анализа как изображение и просматривать AST и исходный код после каждого прохода в компиляторе. Вот сравнение частей AST и дерева синтаксического анализа . Они генерируются тривиально с помощью phc. Вы можете увидеть IR компилятора, CFG, форму SSA и отладочные данные вывода типа и анализа псевдонимов. Вы также можете включать и выключать оптимизацию и передачи, чтобы увидеть эффект, который они дают.

Думаю, это может быть полезно для вас.

18
ответ дан 28 November 2019 в 03:46
поделиться

Вы можете увидеть вывод препроцессора с помощью -E . -fdump-tree - * выгружает внутреннее представление дерева, например -fdump-tree-all . Существуют различные опции -d для создания дампа промежуточных представлений RTL, например -fdump-rtl-all (см. Руководство для индиуальных проходов, которые вы получаете дампы); кроме того, -dD сбрасывает все определения макросов.

11
ответ дан 28 November 2019 в 03:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: