这里采用一种将解析器和语义分析器进一步融合在一起的方式进行语义分析
- 对于每个声明, 语义分析器必须检查所使用的名称是否已经声明过。
- 对于表达式或语句中每次出现的名称,语义分析程序必须检查名称是否已声明,以及期望的 用途是否符合声明。
- 对于每个表达式,语义分析器必须计算得到的类型。还需要计算表达式是否为常量。如果是, 它的值是多少
- 对于赋值和参数传递,语义分析器必须检查类型是否兼容。此外,必须检查 IF 和 WHILE 语 句中的条件是否为布尔类型。
RTTI (Run-Time Type Identification), 通过运行时类型信息查询能够使用基类的指针或引用来检查这些指针或引用
所指对象的实际派生类型。
C++可以使用dynamic_cast<>
操作符,但问题是,必须的RTTI只有在C++类附加一个虚表
时才可用;也就是说,使用虚函数。另个一个缺点是C++ RTTI过于臃肿。为了避免这些缺点,LLVM引入自制的RTTI。