手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

25|增强编译器前端功能第4步:综合运用多种语义分析技术

你好,我是宫文学。
在上一节课,我们比较全面地分析了怎么用集合运算的算法思路实现类型计算。不过,在实际的语义分析过程中,我们往往需要综合运用多种技术。
不知道你还记不记得,我们上一节课举了一个例子,里面涉及了数据流分析和类型计算技术。不过这还不够,今天这节课,我们还要多举几个例子,来看看如何综合运用各种技术来达到语义分析的目的。在这个过程中,你还会加深对类型计算的理解、了解常量折叠和常量传播技术,以及实现更精准的类型推导。
好,我们首先接着上一节课的思路,看一看怎么把数据流分析与类型计算结合起来。

在类型计算中使用数据流分析技术

我们再用一下上节课的示例程序 foo7。在这个程序中,age 的类型是 number|null,age1 的类型是 string|number。我们先让 age=18,这时候把 age 赋给 age1 是合法的。之后又给 age 赋值为 null,然后再把 age 赋给 age1,这时编译器就会报错。
function foo7(age : number|null){
let age1 : string|number;
age = 18; //age的值域现在变成了一个值类型:18
age1 = age; //OK
age = null; //age的值域现在变成了null
age1 = age; //错误!
console.log(age1);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 罗 乾 林
    思考题a的类型是number和boolean
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部