编译器:在解析或语义分析中是否考虑隐式类型转换?

时间:2018-08-12 04:31:09

标签: parsing compilation compiler-construction clang semantic-analysis

在我的理解中,隐式转换是在语义分析中完成的,但是clang AST命令clang -Xclang -ast-dump -fsyntax-only file.cpp会在AST中生成类型转换信息,就像这两个代码一样:

  

...
   `-ImplicitCastExpr 0x7fdc27050558 'int'
  ...

     

...
   ImplicitCastExpr 0x7f878884c2d0 'unsigned int'
  ...

提出问题。

1 个答案:

答案 0 :(得分:3)

隐式类型转换通常发生在编译器的语义分析(更具体地说是类型检查)中,但是在解析过程中可能会发生一些隐式类型转换,以生成更简单的AST(直接将文字转换为它们的值,依此类推)。

如果您专门查看所使用的命令选项,我们会发现这意味着

  

-仅fsyntax    运行预处理器,解析器和类型检查阶段。

https://clang.llvm.org/docs/CommandGuide/clang.html

所以我们看到我们期望输出类型信息(需要隐式转换)。

注意:我可能还不清楚,但是类型检查只是语义分析的一个阶段。