编译原理与实现机制

重要通知

解释与编译基本概况

解释型编程语言

  • 实现语言:Python、JavaScript、PHP。

编译型编程语言

  • 实现语言:C、C++、Java。

源代码

计算机程序

编译型语言:程序执行前编译,相对而言,执行效率高,例如C、C++、Java
解释性语言:程序执行前由中间代码进行解释,Python、JavaScript、Shell

解析器 解释器 编译器(compiler) 语法分析器(parser) 文字分析器(lexical analyzer) 抽象语法树(abstract syntax tree) 转译 直译

编译器的基本结构 编译器的工作流程:源代码 -> 扫描程序 -> 语法分析程序 -> (语法树) -> 语义分析程序 -> (注释树) -> 源代码优化程序 -> (中间代码) -> 代码生成器 -> (目标代码) -> 目标代码优化程序 -> 目标代码

编译器的工作过程:https://www.runoob.com/w3cnote/working-process-of-the-compiler.html

编译器

步骤: 语法分析、词法分析、语法制导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化

实现原理

词法分析 - 生成语法树 - 编译 - 执行

机器语言

是机器能直接识别的程序语言或指令代码,勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。 指令系统、电路、信号强弱、电压高低、电流强弱

编译器

前端:构造源程序的中间表示 后端:从中间表示生成目标代码 〔编译器〕词法分析 • 线性分析 • 扫描 在编译器中,线性分析被称为词法分析或者扫描。例如,在词法分析中,赋值语句position := initial + rate * 60中的字符串分组为以下记号组:1、标识符position。2、赋值符号:=。3、标识符initial。4、加号+。5、标识符rate。6、乘号*。7、数字60。在词法分析过程中,分隔这些记号的字符的空格将被删除。

程序设计语言

程序模式:即语言的语法; 程序含义:即语言的语义。 语言语法的表示法:上下文无关文法,BNF(Backus-Naur范式):定义语言的语法,制导源程序的翻译。 语法的编译技术:语法制导翻译技术 编译器前端结构:字符流-词法分析器-记号流-语法制导翻译器-中间表示 语法定义、语法制导翻译、符号表、抽象堆栈机、、、

本章将围绕机器指令探讨指令的格式和长度、操作码编码技术、地址码寻 址技术,结合指令的分类和功能,剖析复杂指令系统和精简指令系统。

词法分析器

使用正则表达式对模板代码进行词法分析,将代码分割成一个个的词法单元(token),例如元素、属性、文本、表达式等。

语法分析器

根据词法单元构建语法树,语法树是一种表示代码结构和语法的树状数据结构,其中每个节点表示一个语法单元,如元素、属性、文本、表达式等。节点之间通过边连接,边表示节点之间的关系,如父子关系、兄弟关系等。

字节码 (Bytecode)

机器码

JIT编译器

AST(abstract syntax tree)

AST(abstract syntax tree),即抽象语法树。

AST Explorer:http://astexplorer.net

CST(concrete syntax tree)

CST(concrete syntax tree),即具体语法树。

解析编译工具库

Esprima

Esprima是一个高性能、符合标准的 ECMAScript解析器,用 ECMAScript(也通常称为 JavaScript)编写,Esprima 可用于对 JavaScript 程序执行词法分析(标记化)或句法分析(解析)。

var esprima = require('esprima');
var program = 'const answer = 42';

esprima.tokenize(program);
esprima.parse(program);

Escodegen

Escodegen ( escodegen ) 是 来自Mozilla 的 Parser API AST的ECMAScript (也通常称为JavaScript)代码生成器。

escodegen.generate({
  type: 'BinaryExpression',
  operator: '+',
  left: { type: 'Literal', value: 40 },
  right: { type: 'Literal', value: 2 }
});

Last Updated:
Contributors: 709992523