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 阶段已经建立了作用域的嵌套结构。那么在这里,编译器只需要沿着这个嵌套结构逐级查找就行了.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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章-扩展属性