自学编译原理(一)——概述
来源:互联网 发布:网络犯罪破案率 编辑:程序博客网 时间:2024/05/18 00:43
自学编译原理(一)——概述
编译器的大体结构
编译程序是一个设计分析和综合的复杂系统。它通常由词法分析器、语法分析器、语义分析与中间代码生成器、代码优化器、目标代码生成器、出错处理器、符号表管理器组成。
词法分析概述
主要任务 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,并将识别出的单词转换成统一的机内表示——词法单元(token)形式
token: <种别码,属性值>
token类别单词类型 种别 种别码 关键字 program if else then … 一词一码 标识符 变量名 数组名 记录名 过程名 … 多词一码 常量 整型 浮点型 字符型 布尔型 … 一型多码 运算符 算数(+ - * / ++ –) 关系(> < == != >= <=) 逻辑(& ~) 界限符 ; ( ) { } … 一词一码语法分析概述
主要任务 语法分析器(parser)从词法分析器输出的tokken序列中识别出各类短语,并构造语法分析树(parse tree)
语法分析树描述了句子的语法结构语义分析概述
主要任务
- 收集标识符的属性信息
- 种属(kind) 简单变量 复合变量(数组 记录 …) 过程 …
- 类型(type) 整型 字符型 布尔型 指针型 …
- 存储位置 长度
- 值
- 作用域
- 参数和返回信息
收集到的属性信息存在符号表中
- 语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
- 收集标识符的属性信息
中间代码生成及编译后端概述
中间表示形式 三地址码 语法结构树/语法树
三地址码由类似于汇编语言的指令序列组成 每个指令最多有三个操作数
三地址指令的表示
四元式(op, y, z, x)
学习过程依照中国大学MOOC上哈工大开设的编译原理一课,参考书籍《编译原理》(蒋宗礼 姜守旭 编著)。
阅读全文
0 0
- 自学编译原理(一)——概述
- [编译原理]学习笔记(一)——编译概述
- 【编译原理】概述总结(一)
- Python自学(一):概述
- 《编译原理》笔记一之编译程序概述
- 编译原理 编译概述
- 编译原理(一)
- 编译原理(一)
- 编译原理(一)
- 编译原理:(一)
- 编译原理 (一)
- 编译原理自学开坑
- 编译原理概述
- 编译原理之概述
- 编译原理 - 概述
- 编译原理概述
- 编译原理概述
- 编译原理——变量声明语句(一)
- 100.判断树是否相同
- Android 省市区三级连动
- 介绍 JSON
- Android Support Library控件详细介绍之RecyclerView
- (Dos)-BAT命令入门与高级技巧详解(转)
- 自学编译原理(一)——概述
- eclipse设置xml忽略报错提示
- Android Log
- jQueryday07补充(阻止默认事件 五角星)
- HelloWorld
- Windows_Postgresql相关操作内容
- 利用openssl的AES和RSA完成对数据的加密解密
- Android Studio Gradle构建脚本
- C#定义泛型方法错误-类型“T”必须是引用类型才能用作泛型类型或方法“System.Data.Linq.Table<TEntity>”中的参数“TEntity”