07/04/18 08:18:34
より正確に言うと、文法上正しい位置に現れた識別子は、
その文法に従って変数名, 関数名, 構造体/共用体名, typedef名, …
のいずれかの属性が付けられる (仮定される)。
例えば
a = 3; // aは変数
b(); // bは関数
変数と仮定した識別子の定義と参照に矛盾がないことを
チェックするのは意味解析フェーズの仕事。
typedef int integer; // 定義1:integerはtypedefされた型名
integer a; // 定義2:a は integer型変数
a(); // 参照:a は 関数名のはずだったが
// 定義2と矛盾している→エラー