Romantics三大浪漫(编译原理+操作系统+计算机图形学)

Romantics三大浪漫

  • 一、编译原理
    • 1.1 研究翻译的科学
    • 1.2 编译器和解释器
    • 1.3 编译的流程(JIT为例)
    • 1.4 词法分析器
    • 1.5 多有限状态机提取Token- 实现词法分析器lexer
    • 1.6 实现流的peek和putBack操作

Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第1张图片
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第2张图片

一、编译原理

本章目标: 提升编程能力

  • 区别于面向研究人员、学者的编译原理教学,目标是让大家从更深层次理解程序语言架构、面向对象、算法和数据结构以及编程思想。
  • 化繁为简,掌握思想、原理、编程技巧,弱化高等数学、逻辑学等。
  • 为了教学用创造了一门语言TinyScript并手把手带大家实现。(多语言Java/Javascript)

Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第3张图片

1.1 研究翻译的科学

编译的作用:一种语言翻译成另一种语言。

  • 如高级语言->低级语言->机器语言
  • 如硬件语言->电路布线
    Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第4张图片
    翻译的理解:只作用于形式语言
    Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第5张图片

1.2 编译器和解释器

编译器:将源程序编译成目标程序。如C

Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第6张图片
解释器:同时接受源程序输入,执行并返回输出。如JavascriptRomantics三大浪漫(编译原理+操作系统+计算机图形学)_第7张图片
混合编译器:如过去的JAVA

  • 中间代码更容易被翻译成目标程序,优化空间更大
  • 中间语言的存在更利于编译器的实现
  • 让虚拟机处理复杂的执行环境 (跨平台)Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第8张图片

即时编译器JIT(Just-in-time compiler):一种提高效率的方法,中间代码不是直接执行,而是先被编译成机器码再执行。如现在的JAVA

交叉编译:在一个平台编译产生多个平台的可执行代码。

1.3 编译的流程(JIT为例)

分层架构设计关注度分离(每层都有意义)、层足够强大(每层优质的数据结构)

分析一对源程序进行分析形成中间表示(抽象语法树、符号表
–词法分析
–语法分析
–语义分析
–翻译
综合一根据中间表示生成目标语言,提供运行环境等
–中间语言
–代码优化
–机器码生成
–运行环境及其他
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第9张图片

Step1:词法分析(分词短句+判断词性)
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第10张图片
Step2:语法分析(语法规则)
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第11张图片
Step3:语义分析
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第12张图片
Step4:翻译为中间代码
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第13张图片
Step5:生成机器码
Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第14张图片

Step6:提供运行时环境

  • 有的编译器将代码编译成机器码,按照操作系统的约定编译成一个应用,运行成为操作系统的进程
  • 有的编译器将代码编译成中间代码 (字节码、三地址代码等) ,然后在操作系统中启动一个虚拟容器 (进程)来执行他们
  • JIT编译器一边执行中间代码,一边编译他们

1.4 词法分析器

词法分析:将字符流转成符号流Token。{输入:源代码 (字符流) 输出: 符号流 }
符号Token : 词法分析的结果,每个字符是一个词法单元,即元组(一个字符串 : 一个词性描述)
词性描述 : Keyword(关键字)、Variable(变量)、Operator (操作符)、Bracket (括号)、String(字符串)、Float(浮点数)、Boolean(布尔)

Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第15张图片

1.5 多有限状态机提取Token- 实现词法分析器lexer

Romantics三大浪漫(编译原理+操作系统+计算机图形学)_第16张图片
Token.java实现各个有限状态机独立提取Token
Lexer.java实现多个有限状态机的词法分析器
TokenType.java实现词法分析器的接口

1.6 实现流的peek和putBack操作

Stream:随着时间推移逐渐产生的可用数据序列。
类比:工厂流水线上需要处理的一个个产品。 每个工人从流中拿起物件进行加工再放回去 (流的处理节点)。
作用: 抽象出像工厂流水线一样处理数据的标准过程。

你可能感兴趣的:(笔记,java,jvm,开发语言)