中文语义分析 开源java_从零开始开发JVM语言(八)从类型定义开始的语义分析...

目录戳这里

语义分析的结果会被送去字节码生成器,所以该结果必须接近字节码。而字节码格式是以类为单位的,所以语义分析的结果也应当是“类”。

这里的类不光是class,还包括了interface。在字节码和标准库的反射中,并不对两者做区分,只是将interface作为一个“修饰符”而已。同样的还有annotation(由于Latte-lang不支持定义注解,注解需要用java定义然后在Latte中使用。所以结果中不包括注解)。在语言层面,类和接口区别非常大,所以在这里还是将两者做了区分。

由于语义分析没有统一的算法,各个语言的特性也不同,所以下文将直接以Latte-lang实现的语义分析为模板进行描述,不会具有普遍性。但是对于类java语言完全可以照搬这一套实现方式。若是Lisp系之类与java相差非常大的,看一看也无妨。因为这一套结构实际上是对字节码的一种“封装”,毕竟JVM语言总是需要转为字节码的。

由于我定下的语义分析输出是接近字节码的表示,那么语义分析就必须输出一个个类型而不是单个的语句。而且任何值都会包含类型,所以总是需要先解析类型的。

#步骤 我将语义分析分为4步

注:为了本系列文章前后连贯且不受更新影响,所有链接都指向曾经版本的一个tag。代码结构与最新版是一致的,不过有些具体实现会变更(已知方法重写和方法寻找逻辑有问题并已在后续版本做了修复)

recording 记录所有等待解析的类型。记录类型名称和类型的种类(类、接口),记录下每个文件对应的import

signatures 记录父类,接口,对类型填入构造函数、方法、字段,以及以上所有位置的注解。这个步骤会完成继承树的构建,方法、构造函数签名的完成(方法名、参数类型)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值