- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教材 编译原理(第3版).刘铭,徐兰芳,骆婷编著. 电子工业出版社. 复习补充第一章 37 用户名/密码:compiler 1.3 编译程序的实现方法 设计目标 目标程序小,执行速度快。 编译程序小,执行速度快。 诊断能力强,可靠性强。 可移植性,可扩充性。 如何实现编译器?直接用可运行的代码编制——太费力! 问题一:A机上有一个C语言编译器,是否可利用此编译器实现B机上的C语言编译器? 解决:移植方法 用C语言写一个B机上的C编译程序( P0: C→B) 用A机上的C编译程序(P1: C→A)编译它(P0),得到可在A机上运行的“B机上的C编译程序”(P2: C→B) 在A机上用P2再编译P0,得到可在B机上运行的“B机上的C编译程序” (P3:C→B) T 形图 表示语言翻译的 T 形图 源语言 书写语言 目标语言 编译程序P 1)交叉编译(Cross Compiling) 条件:A 机有 C 语言的编译程序 目的:实现 B 机的 C 语言的编译 C语言 C语言 B机器 C语言 A机器 A机器 C语言 A机器 B机器 1. (人)用 C语言编制B机的C编译程序P0(C→B) (A机的C编译程序P1)编译P0,得到在A机上可运行的P2(C →B) P0 P1 P2 交叉编译 C语言 C语言 B机器 C语言 A机器 B机器 C语言 B机器 B机器 3. (A机的P2)编译P0,得到在B机上可运行的P3(C →B) P0 P2 P3 问题二: A机上有一个C语言编译器,现要实现一个新语言NEW的编译器?能利用交叉编译技术么? 问题三:直接在一个机上实现C语言编译器,还有别的技术么? 解决: 用汇编语言实现一个 C子集的编译程序(P0—人) 用汇编程序处理该程序,得到(P2:可直接运行) 用 C子集编制 C语言的编译程序(P3—人) 用P2编译P3,得到P4 2) 编译程序的自展技术 C子集 汇编语言 机器语言 汇编语言 机器语言 机器语言 C子集 机器语言 机器语言 1. 用汇编语言实现一个 C子集的编译程序(P0—人) 2. 用汇编程序(P1)处理该程序,得到(P2:可直接运行) P0 P1 P2 编译程序的自展技术 C语言 C子集 机器语言 C子集 机器语言 机器语言 C语言 机器语言 机器语言 3. 用 C子集编制 C语言的编译程序(P3—人) 4. 用P2编译P3,得到P4 P3 P2 P4 3) 利用编译程序自动生成器 词法分析器的自动生成程序 LEX 词法规则说明 词法分析程序 (C程序) 输入: 词法(正规表达式) 识别动作(C程序段) 输出: yylex( ) 函数 语法分析器的自动生成程序 YACC 语法规则说明 语法分析程序 (C程序) 输入: 语法规则(产生式) 语义动作(C程序段) 输出: yyparse( ) 函数 编译原理 第二章文法和语言的基本知识 第2章 文法和语言的基本知识 2.1.概述 2.2.字母表和符号串的基本概念 2.3.文法和语言的形式定义 2.4.短语、直接短语和句柄 2.5.语法树与文法的二义性 2.6.文法和语言的分类 编译原理 第二章文法和语言的基本知识 2.1概述 语法 是对语言结构的定义; 语义 是描述了语言的含义; 语用 是从使用的角度去描述语言。 例:s=2*3.1416*r*(r+h)的非形式化的描述如下: 语法一赋值语句由一个变量、一个后随赋值号“=”、及其后跟一个表达式构成。 语义一首先计算语句右部表达式的值,然后把所得结果送入左部变量中。 语用一赋值语句可用来计算和保存表达式的值。 第二章 文法和语言的基本知识 编译原理 第二章文法和语言的基本知识 2.2字母表和符号串的基本概念 1、字母表和符号串 1)字母表是元素的非空有穷集合。 例如: ∑={a,b,c} 注意: 字母表中至少包含一个元素;字母表中的元素, 可以是字母、数字或其他符号 2)符号(字符) 字母表中的元素称为符号,或称为字符。 3)符号串(字) 符号的有穷序列称为符号串。 例如:上述字母表,则有符号串a,b,ab, ba,cba,abc... 不包含任何符号的符号串,称为空符号串,用ε表示,即空符号串由0个符号组成,其长度| ε |=0 编译原理 第二章 文法和语言的基本知识 2、符号串的运算 1)符号串的连结 例如,设x=abc,y=10a,则xy=abc10a yx=10aabc。 注意:对任意一个符号串x, 有 ε x = x ε = x 2) 集合的乘积 设A和B是符号串的集合,则A和B的乘积定义为:
文档评论(0)