Как понять В ГЛУБИНЕ компилятор gcc? - PullRequest
1 голос
/ 07 марта 2019

История вопроса: я пытаюсь понять, как работают компиляторы.Я узнал много нового: сканер, парсер, AST, IR, оптимизацию, фронтенд, бэкэнд, LL (1), ... Я добился постепенного прогресса, и это очень интересно.Теперь я хотел бы сделать несколько практических работ.
С точки зрения программиста, я знаю, почему typedef struct { int x; mytype* next; } mytype; не компилируется, и я знаю правильный синтаксис typedef struct mystruct { int x; struct mystruct* next; } mytype;, но я хотел бы знать, где возникает проблема ТОЧНО во время компиляции.Я использую gcc, я хотел бы знать, как можно использовать параметры разработки gcc -fdump -... для ответа на этот вопрос.

1 Ответ

1 голос
/ 18 июня 2019

Первым шагом в работе компилятора GCC является парсер

c-parser.c 

Он анализирует ваш c, c ++ или другой код в простом представлении:

Parse -> Gimplify -> Tree -> SSA -> Optimize -> Generate -> RTL -> Optimize RTL Generate -> ASM

Ошибки могут быть найдены, например, в терминале или в IDE при выводе ошибок, например:

gcc yourcode.c
yourcode.c:2:25: error: unknown type name 'mytype'
 typedef struct { int x; mytype* next; } mytype;
                         ^~~~~~

Вы также можете посмотреть, как это работает через ссылка

Извините за мой английский.

...