java编译器源码解析-语义分析-属性分析

二、属性分析

属性分析attribute(),核心逻辑在Attr类的attrib()方法。

com.sun.tools.javac.comp.Attr 类的代码。在这个类的头注释里,你会发现原来 ATTR 做了四件事:

Check:类型检查。

Resolve:做名称的消解,

ConstFold:常量折叠,

Infer:用于泛型中的类型参数推导。

2.1.类型检查

类型检查的方法调用链如下:


JavaCompiler.compile()
->JavaCompiler.attribute()
->Attr.attib()
->Attr.attribClass()      
->Attr.attribClassBody()
->Attr.attribStat()      
->Attr.attribTree()      
->Attr.visitVarDef()      
->Attr.attribExpr(TCTree,Env,Type)
->Attr.attribTree()      
->Attr.visitLiteral()    
->Attr.check()            
->Check.checkType()      

主要内容就是比较赋值表达式等号两边的类型是否匹配。

2.2.引用消解

就是把代码中用到了各种符号,包括类、变量和方法关联到他们的定义的过程。

com.sun.tools.javac.comp.Resolve 类的 findIdentInternal() 方法

引用消解的实现思路也很清晰。编译器在 Enter 阶段已经建立了作用域的嵌套结构。那么在这里,编译器只需要沿着这个嵌套结构逐级查找就行了.

2.3.常量折叠

2.4.泛型类型参数推导

posted @   Mars.wang  阅读(294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2021-04-15 TLPI读书笔记第18章-目录与链接3
2021-04-15 TLPI读书笔记第18章-目录与链接2
2021-04-15 TLPI读书笔记第18章-目录与链接1
2021-04-15 TLPI读书笔记第16章-扩展属性
点击右上角即可分享
微信分享提示