编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

28 | 前端总结:语言设计也有人机工程学

一课一思
课程小结
支持友好的语言特性
前端编译技术总结
前端总结:语言设计也有人机工程学

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
正如我在上一讲的“课程导读”中所提到的,在“现代语言设计篇”,我们会开始探讨现代语言设计中的一些典型特性,包括前端、中后端、运行时的特性等,并会研究它们与编译技术的关系。
今天这一讲,我先以前面的“真实编译器解析篇”所分析的 7 种编译器作为基础,来总结一下它们的前端技术的特征,为你以后的前端工作做好清晰的指引。
在此基础上,我们还会进一步讨论语言设计方面的问题。近些年,各种新语言都涌现出了一个显著特征,那就是越来越考虑对程序员的友好性,运用了人机工程的思维。比如说,自动类型推导、Null 安全性等。那么在这里,我们就一起来分析一下,要支持这些友好的语法特征,在编译技术上都要做一些什么工作。
好,首先,我们就来总结一下各个编译器的前端技术特征。

前端编译技术总结

通过前面课程中对 7 个编译器的解读分析,我们现在已经知道了,编译器的前端有一些共性的特征,包括:手写的词法分析器、自顶向下分析为主的语法分析器和差异化的语义分析功能。

手写的词法分析器

我们分析的这几个编译器,全部都采用了手写的词法分析器。主要原因有几个:
第一,手写的词法分析实现起来比较简单,再加上每种语言的词法规则实际上是大同小异的,所以实现起来也都差不多。
第二,手写词法分析器便于做一些优化。典型的优化是把关键字作为标识符的子集来识别,而不用为识别每个关键字创建自动机。V8 的词法分析器还在性能上做了调优,比如判断一个字符是否是合法的标识符字符,是采用了查表的方法,以空间换性能,提高了解析速度。
第三,手写词法分析器便于处理一些特殊的情况。在 MySQL 的词法分析器中,我们会发现,它需要根据当前字符集来确定某个字符串是否是合法的 Token。如果采用工具自动生成词法分析器,则不容易处理这种情况。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

现代语言设计中的前端技术特征包括手写的词法分析器、自顶向下分析为主的语法分析器和差异化的语义分析功能。手写的词法分析器简单易实现,便于优化和处理特殊情况。自顶向下分析为主的语法分析器提供灵活性,而自底向上算法在某些情况下也可应用。语义分析功能包括建立符号表、引用消解和类型检查,以及处理特有的语义。现代语言特性如自动类型推导和Null安全性也得到了广泛支持。自动类型推导减少了类型声明的工作量,而Null安全性则提高了程序的健壮性。这些特性的实现对编译器的设计和语义分析算法有着重要影响。 文章还介绍了Null安全性在编程语言中的重要性,以及Kotlin等语言如何通过特定的语法和操作符实现Null安全性,从而减少Null引用可能带来的危害和简化Null检查的代码量。此外,文章还提到了一些现代语言的友好语法糖和词法规则,如分号推断、单例对象、纯数据的类、标识符支持Unicode和多行字符串字面量等。这些友好的设计使得编程更加便捷和灵活。 总的来说,本文通过介绍现代语言设计中的前端技术特征以及一些友好的语法糖和词法规则,使读者能够快速了解现代编程语言的一些重要特性和优势,为他们在选择和使用编程语言时提供了有益的参考和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • reverse
    补充以下 JS 从ES6 就已经支持多行字符串字面量了

    作者回复: 多谢分享!

    2020-08-24
    2
  • Tino's Park
    请问多行字符串中如果包含起止符号,怎么处理?

    作者回复: 转义呀。

    2020-09-16
    2
  • 琴魂醉
    最后的前端总结图中 语义共性 “应用消解”应该是“引用消解”
    2021-11-05
  • minghu6
    建议看一下Haskell的类型系统
    2021-06-20
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部