当前位置: 首页 > news >正文

编译原理1.2

词法分析概述

词法分析的主要任务

      从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元(token)形式

    词法分析又叫扫描(scanning)

 

词法分析后得到的token序列举例

通过第一个分量就可以区分的单词,第二个分量都是空的

 

SLP左括号

SRP右括号

LP左花括号

RP右花括号

IDN 标识符(identifier)

NE 不等号

CONST常量

INC ++

SEMI分号

 

语法分析(pasring)概述

语法分析的主要任务

      语法分析器从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree)

      语法分析树描述了句子的语法结构

 

例1:赋值语句的分析树

例2: 变量声明语句的分析树

 

语义分析概述

①收集标识符的属性信息

语义分析收集的标识符的属性信息都会存放在符号表中,每一个标识符都对应着符号表中的一条记录

②语义检查

       

 

中间代码生成和编译器后端

常用的中间表示形式

①三地址码(Three-address Code)

       三地址码由类似于汇编语言的指令序列组成,每个指令最多有三个操作数(operand)

 

②语法结构树/语法树(Syntax Trees)

      这里的语法结构树syntax tree和之前讲的语法分析书parse tree不是一回事

 

 

常用的三地址指令

三地址指令的表示

三地址指令的四元式表示

三地址指令的四元式表示与前面说过的自然语言的中间表示形式有相似之处

中间代码生成的例子

 

目标代码生成

      目标代码生成以源程序的中间表示形式作为输入,并把它映射到目标语言

      目标代码生成的一个重要任务是为程序中使用的变量合理分配寄存器
 

代码优化

      为改进代码所进行的等价程序变换,使其运行得更快一些、 占用空间更少一些,或者二者兼顾

      代码优化分为机器无关代码优化机器相关代码优化

 

 

 

相关文章:

  • 汇编语言的种类
  • Bochs虚拟机 编写主引导扇区程序并执行
  • 编译原理2.1
  • Python 函数式编程(一):高阶函数/函数名变量
  • Pycharm debug
  • MyOS(二):用Java和汇编开发一个helloworld操作系统内核
  • 仿QQ聊天室项目
  • 基于Python+Flask+Echarts的 COVID-19数据可视化项目
  • go语言相关知识
  • go语言相关库和函数
  • Windows内核文件
  • MyOS(三):软盘读写
  • Python函数式编程(二):map、 reduce、 filter、 sorted
  • OpenCV(一)——图片灰度转换(灰度图) 修改图片尺寸(cv2.resize) 读取视频
  • opencv人脸识别 (一):人脸检测 (Haar级联 静态图像中人脸检测 视频中的人脸检测 )
  • 时间复杂度分析经典问题——最大子序列和
  • [nginx文档翻译系列] 控制nginx
  • [数据结构]链表的实现在PHP中
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • codis proxy处理流程
  • HTTP--网络协议分层,http历史(二)
  • JS 面试题总结
  • React的组件模式
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 前端路由实现-history
  • 算法---两个栈实现一个队列
  • 自动记录MySQL慢查询快照脚本
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​iOS实时查看App运行日志
  • "无招胜有招"nbsp;史上最全的互…
  • %@ page import=%的用法
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET Project Open Day(2011.11.13)
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET序列化 serializable,反序列化
  • @Data注解的作用
  • @RequestMapping 的作用是什么?
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2]十道算法题【Java实现】
  • [acm算法学习] 后缀数组SA
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [APIO2015]巴厘岛的雕塑
  • [BZOJ] 3262: 陌上花开
  • [C++] sqlite3_get_table 的使用
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [iOS]iOS获取设备信息经常用法
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [linux] Key is stored in legacy trusted.gpg keyring
  • [linux运维] 利用zabbix监控linux高危命令并发送告警(基于Zabbix 6)
  • [MySQL] 二进制文件
  • [nlp] 多语言大模型不同语种/语系数据的数据配比调节