2014-10-20 2 views
1

Например, если я имел следующий кодКакая фаза компиляции отвечает за обнаружение незаявленных структур?

int f() 
{ 
/*set struct value*/ 
struct test_2 t; 
t.j = 0; 
} 

Если я получаю сообщение об ошибке, таких как struct test_2 не объявил мне было интересно, на каком этапе компиляции определяет конкретную ошибку? Также мне было интересно, какая фазовая компиляция удалит комментарий из кода? Мне жаль, если это глупый вопрос, я просто немного разбираюсь в компиляторах и мне было любопытно.

Насколько я знаю фаза компиляции включает следующее

Lexical Analysis 
Parsing 
Semantic Analysis 
Intermediate Code Generation 
Code Optimization 
Final Code Generation 
+2

Этот вопрос, вероятно, будет закрыт для того, чтобы быть слишком широким (здесь есть два вопроса, и ответ хотя бы на один из них «зависит от этого»). Если вы можете сфокусировать вопрос, пожалуйста, сделайте это. –

+0

@RogerLipscombe Я согласен, что это может измениться, но я просто хотел получить общий ответ, чтобы получить представление. Я думаю, что ответ Скотта имеет смысл для меня. – user1010101

ответ

1

Это будет зависеть от компилятора, но наиболее естественные припадки бы Лексический анализ для комментариев (так как они игнорируются остальными процесс и являются регулярными выражениями) и Semantic Analysis для обнаружения того, что что-то не было объявлено (поскольку Parsing не будет содержать таблицу символов).

Смежные вопросы