2.4.1  汇编词法、语法分析

  

汇编语言有独立的词法记号,对于汇编词法的分析,只需要构造相应的词法有限自动机就可以了。举一个简单的例子:

mov eax,[ebp-8]

  该指令有8个词法记号,它们分别是:'mov''eax'逗号'[''ebp''–''8'和']'。汇编器的词法分析器将词法记号送到语法分析器用于识别汇编语言的语法模块。同样,我们需要构造汇编语言语法分析器,在这里可以提前看一下上述汇编指令的抽象语法树,如图2-13所示。

图2-13  汇编指令抽象语法子树

  图2-13中是简化后的抽象语法树,与编译器类似,语法分析器会在非叶子节点处识别语法模块,以产生语义动作。由于汇编器要输出可重定位目标文件,因此在语法分析时要收集目标文件的相关信息。比如记录代码段和数据段的长度、目标文件符号表的内容、重定位表的内容等,这些操作都在语法分析器识别每个语法模块时使用语法制导的方式完成。

  另外,汇编器和编译器最大的不同是汇编器需要对源文件进行两遍扫描,其根本原因是汇编语言允许符号的后置定义,例如汇编语言常见的跳转指令:

jmp L

L:

  很明显,在第一遍分析jmp指令的时候,汇编器并不知道符号L是否已经定义。因此,汇编器需要通过第一遍扫描获取符号的信息,在第二遍扫描时使用符号的信息。

自己动手构造编译系统:编译、汇编与链接2.4.1 汇编词法、语法分析相关推荐

  1. 自己动手构造编译系统:编译、汇编与链接

    "自己动手系列" 自己动手构造编译系统 编译.汇编与链接 范志东  张琼声  著 图书在版编目(CIP)数据 自己动手构造编译系统:编译.汇编与链接 / 范志东,张琼声著. -北京 ...

  2. 自己动手构造编译系统:编译、汇编与链接2.1.3 符号表管理

    2.1.3  符号表管理 符号表是记录符号信息的数据结构,它使用按名存取的方式记录与符号相关的所有编译信息.编译器工作时,少不了符号信息的记录和更新.在本书定义的高级语言中,符号存在两种形式:变量和函 ...

  3. 自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析

    2.1.4  语义分析 编译原理教材中,将语言的文法分为4种:0型.1型.2型.3型,并且这几类文法对语言的描述能力依次减弱.其中,3型文法也称为正规文法,词法分析器中有限自动机能处理的语言文法正是3 ...

  4. c语言程序的生命周期(编写、预处理、编译、汇编、链接、执行)

    目录 程序的生命周期 一.引言 二.程序经历的六个阶段 1.阶段一:编辑(Edit) 2.程序编译系统(Programs Compilation System) 阶段二:预处理(Preprocess) ...

  5. 了解“预编译、编译、汇编、链接”这四个过程对你有很大帮

    转自:胡薇 了解"预编译.编译.汇编.链接"这四个过程对你有很大帮助-电子发烧友网 如有侵权,告知立马删除 补充:C语言条件编译及编译预处理阶段 - Rusty's code - ...

  6. c语言编译过程详解,预处理,编译,汇编,链接(干货满满)

    楔子 我们在各自的电脑上写下代码,得明白我们代码究竟是如何产生的,不想了解1,0什么的,但这几个环节必须掌握吧. 我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令 ...

  7. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

    例子:由多个源文件组成的C程序,经过编辑.预处理.编译.链接等阶段才能生成最终的可执行程序.此过程中,在__c__阶段可以发现被调用的函数未定义. A. 编辑和预处理 B. 预处理 C. 编译 D. ...

  8. Linux下C语言执行过程(预处理,编译,汇编,链接,执行)

    1.C语言的执行过程包括5个步骤:分别是:预处理,编译,汇编,链接,执行 第一步:编写C源代码,截图如下: 2.预处理,命令为:gcc -E variable.c -o variable.i(这步的作 ...

  9. C语言的预处理、编译、汇编、链接

    2019独角兽企业重金招聘Python工程师标准>>> 一.预处理 预处理指令的执行主要包含下列事情: 1.头文件的包含 2.注释的删除 3.宏定义的替换 4.条件编译的选择 指令: ...

最新文章

  1. c语言if.while.for,C语言操纵语句输入输出ifwhilefor.ppt
  2. HDOJ 1905 Pseudoprime numbers(模运算)
  3. 动态创建DataGrid的模版列(转)
  4. 局部特征(4)——SIFT和SURF的比较
  5. 心灵战争服务器维护,心灵战争服务器异常产生哪些问题如何解决_心灵战争服务器异常产生问题及解决方法_玩游戏网...
  6. python与tensorflow的关系_Tensorflow GPU与CPU安装库的区别
  7. 从Storm到Flink,有赞五年实时计算效率提升实践
  8. Eclipse,MyEclipse 安装SVN插件
  9. Android 8.0(30)--- 应用快捷方式(ShortcutManager)的使用
  10. DotNet中的集合对象(2): Hashtable
  11. 在网页中使用超链接来打开本地应用(可传参数)
  12. 最长回文子串(Longest Palindromic Substring)——三种时间复杂度的解法及LeetCode[5] - 最长回文子串动态规划
  13. linux 可道云_帮助 - 可道云-私有云存储协同办公平台_企业网盘_企业云盘_网盘_云盘...
  14. 冯言冯语说DSP(二)序列的z变换
  15. 油猴插件的介绍和安装详解脚本的介绍和添加举例
  16. 阿里云香港和大陆的服务器分析
  17. 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接,该怎么办...
  18. 迅雷thunder://地址与普通url地址转换
  19. 人间不正经生活语录(一)
  20. Python数据可视化:数据分布图表可视化

热门文章

  1. 第二十:如何把Jenkins+Allure2生成的报告发送邮件(重点超详细)
  2. Windows10安装Jmeter(图文教程)
  3. fiddler如何显示IP地址栏?
  4. Hibernate性能优化
  5. 鸿蒙内部测试情况,鸿蒙OS内测曝光,安卓劲敌浮出水面!
  6. wamp xampp mysql端口冲突_解决xampp端口冲突
  7. “sudo: apt-get:找不到命令”的解决方法
  8. Excel快速选择区域
  9. 计算机应用基础选择题综合十,计算机应用基础选择题综合复习练习题
  10. android 开机打开串口失败,请大神帮我看看这是怎么回事,一用就说串口打开失败,再电脑上试...