第11章 语义分析和中间代码生成

合集下载

(完整版)编译原理名词解释

(完整版)编译原理名词解释

(完整版)编译原理名词解释1.源语⾔:书写源程序所使⽤的语⾔2.源程序:⽤程序设计语⾔书写的程序3.⽬标语⾔:计算机的机器指令。

⽬标语⾔可以是机器语⾔,也可以是汇编语⾔,或者是其他中间语⾔,但最终结果必是机器语⾔。

4.⽬标程序:由机器指令构成的程序。

⽬标程序是经过翻译程序加⼯后⽤⽬标语⾔表⽰的程序。

5.翻译程序:能够把某⼀种语⾔程序(源程序)改造成另⼀种语⾔程序(⽬标程序)将源程序译成逻辑上等价的⽬标程序的程序。

翻译程序有两种⼯作⽅式:编译和解释。

6.编译程序:也称翻译程序7.解释程序:有些翻译程序在翻译过程中并不产⽣完整的⽬标程序,⽽是翻译⼀句,解释执⾏⼀句,这样的称为解释程序。

8.汇编程序:由汇编语⾔写成的程序9.词法分析:执⾏词法分析的程序成为词法分析器,词法分析依据的是语⾔构词规则。

词法分析器从⽂件读⼊源程序,由字符拼接单词。

每当识别出⼀个单词,词法分析器就输出这个单词的内部码。

10.语法分析:执⾏语法分析的程序叫做语法分析器。

语法分析的任务就是根据语⾔的规则,将词法分析器所提供的单词种别分成各类语法范畴。

11.中间代码⽣成:中间代码产⽣有时称为语义分析,执⾏中间代码产⽣的程序称为中间代码⽣成器。

他的任务时按照语法分析器所识别出的语法范畴产⽣相应的中间代码,并建⽴符号表、常数表,等各种表格。

12.⽬标代码⽣成:执⾏⽬标代码⽣成的程序称为⽬标代码⽣成器。

他的任务是根据中间代码和表格信息,确定各类数据在内存中的位置,选择合适的指令代码,将中间代码翻译成汇编语⾔或机器指令,这部分⼯作与计算机硬件有关。

13.符号表:⽤于记录源程序中出现的标识符,⼀个标识符往往具有⼀系列的语义值,她包括标识符的名称、种属、类型、值存放的地址等等。

14.常数表:⽤于记录在源程序中出现的常数。

15.编译程序前端:是由词法分析器、语法分析器和中间代码产⽣器组成的。

她的特点是依赖于被编译的源程序,输出结果⽤中间代码描述,和⽬标机器⽆关。

(完整版)高级语言与编译程序概述自测题

(完整版)高级语言与编译程序概述自测题

第一章高级语言与编译程序概述一、单项选择题1.将编译程序分成若干个“遍”是为了____。

A. 提高程序的执行效率B. 使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D. 利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握____。

A. 源程序B. 目标语言C. 编译方法D. 以上三项都是3.编译程序绝大多数时间花在____上。

A. 出错处理B. 词法分析C. 目标代码生成D. 管理表格4. ____不可能是目标代码。

A. 汇编指令代码B. 可重定位指令代码C. 绝对指令代码D. 中间代码5.使用____可以定义一个程序的意义。

A. 语义规则B. 词法规则C. 产生规则D. 左结合规则6.词法分析器的输入是____。

A. 单词符号B. 源程序C. 语法单位D. 目标程序7.中间代码生成时所遵循的是____。

A. 语法规则B. 词法规则C. 语义规则D. 等价变换规则8.编译程序是对____。

A. 汇编程序的翻译B. 高级语言程序的解释执行C. 机器语言的执行D. 高级语言的翻译9.词法分析应遵循____。

A. 语义规则B. 语法规则C. 构词规则D. 等价变换规则10.若源程序是高级语言编写的程序,目标程序是____,则称它为编译程序。

A. 汇编语言程序或高级语言程序B. 高级语言程序或机器语言程序C. 汇编语言程序或机器语言程序D. 连接程序或运行程序11.编译过程中,词法分析阶段的任务是____。

A.识别表达式B. 识别语言单词C. 识别语句D. 识别程序二、多项选择题:1.编译程序各阶段的工作都涉及到____。

A. 语法分析B. 表格管理C. 出错处理D. 语义分析E. 词法分析2.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:____和____。

A. 编译阶段B. 汇编阶段C. 运行阶段D. 置初值阶段3.编译程序工作时, 通常有____阶段。

中间代码生成

中间代码生成

:
T integer
T.type=integer T.width=4
enter(x,real,0)
enter(i,integer,8)
例 8-4 x:real; i:integer 的翻译
P{offset:=0}D {offset:=0}D;D {offset:=0}x:T{enter(x,T.type,offset);offset:=offset+T. width};D {offset:=0}x:real{T.type:=real;T.width:=8} {enter(x,T.type,offset);offset:=offset+T.width};D x:real{(x,real,0);offset:=8};D x:real{(x,real,0);offset:=8};i:T{enter(,T.type,o ffset); offset:=offset+T.width} x:real{(x,real,0);offset:=8};i:integer{T.type:=integer; T.width:=4}{enter(i,T.type,offset);offset:=offset+T.wid th} x:real{(x,real,0)};i:integer{(i,integer,8);offset:=12}

全局变量表示为静态数据区的偏移值(offset) 局部变量表示为局部数据区(活动记录部分)的偏移值 两种数据区
例 8-3:相对地址举例
begin real x[8]; integer i, j; …… end 名字 相对地址 x 0 i 64 j 68
0 8 X[1] X[2]
作用域信息的保存

《编译原理教程》第四章语义分析和中间代码生成

《编译原理教程》第四章语义分析和中间代码生成

控制流分析和数据流分析案例
总结词
控制流分析和数据流分析是编译器设计中两种重要的 语义分析技术。
详细描述
在控制流分析案例中,我们以一个具有条件语句和循环 的程序为例,分析其控制流图(Control Flow Graph, CFG)。CFG是一个有向图,用于表示程序中各个基本块 之间的控制流程关系。通过CFG,编译器可以检测到潜 在的程序错误,如死代码和无限循环。在数据流分析案 例中,我们使用数据流方程来跟踪程序中变量的值在执 行过程中的变化。我们以一个简单的程序为例,该程序 包含一个变量在函数调用后被修改的情况。通过数据流 分析,我们可以确定变量的最新值,以便在后续的语义 分析中使用。
定义
三地址代码是一种中间代码形式,它由一系列的三元组操作数和 操作符组成。
特点
三地址代码具有高度规范化,易于分析和优化,且易于转换成目 标代码。
常见形式
常见的三地址代码有三种基本形式,即加法、减法和赋值。
循环优化
定义
循环优化是指在编译过程中,对循环结构进行优化, 以提高目标代码的执行效率。
常见方法
将源程序分解成一个个的词素或标记。
语法分析
根据语言的语法规则,将词素或标记组合成一个个的语句或表达式。
语义分析
对语法分析得到的语句或表达式进行语义检查,确保其语义正确。
中间代码生成
基于语义分析的结果,生成中间代码。
02
语义分析技术
类型检查
类型检查是编译过程中对源代码进行语义分析的重要环节,其主要目的是 确保源代码பைடு நூலகம்类型安全。
常见的循环优化方法包括循环展开、循环合并、循环 嵌套等。
优化效果
通过循环优化,可以减少循环的次数,提高程序的执 行效率。

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案【篇一:西北工业大学版(蒋立源第三版)编译原理课后习题答案】解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3解:c语言的关键字有:auto break case char constcontinue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在c语言中均为保留字。

4解:c语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

c语言中无end关键字。

逗号在c语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

5略第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}(2){anbmcp|n,m,p≥0}(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为g(s) = ({s,x,y},{a,b,c,d,#}, {s→x,s→y,x→axb|#,y→cyd|# },s)(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:g(s) = ({s,w,r},{0,1,#}, {s→w#, w→0w0|1w1|# },s)(5)任何不是以0打头的所有奇整数所组成的集合(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为s→0a|1b|e,a→0s|1c b→0c|1s c→1a|0b3.描述语言特点(1)s→10s0s→aaa→baa→a解:本文法构成的语言集为:l(g)={(10)nabma0n|n, m≥0}。

智慧树答案编译原理知到课后答案章节测试2022年

智慧树答案编译原理知到课后答案章节测试2022年

第一章1.编译器(Compiler)能捕捉的错误都是静态错误(Static errors)。

答案:对2.编译器只能识别动态(Dynamic)语义,但不能识别静态(Static)语义。

答案:错3.对源程序进行编译正确处理顺序为()答案:词法分析、语法分析、语义分析、代码生成4.编译器的各个阶段的产物分别是()、中间代码和目标代码。

答案:记号序列、语法树、注释树5.()执行翻译代码的功能,且立即执行源程序,而不产生中间代码。

答案:解释程序6.将编译程序分成若干个“遍”是为了____。

答案:利用有限的机器内存并提高机器的执行效率7.词法分析器用于识别_____。

答案:单词8.在编译器的功能模块中,扫描器的功能是()。

答案:词法分析9.编译器进行的是()答案:静态语义分析10.编译器中词法分析的输入和输出分别是()答案:字符串、记号串第二章1.确定的自动机以及不确定的自动机都能正确地识别正规集。

答案:对2.正则文法、 DFA和正则表达式均可以用于描述高级程序设计语言的词法。

答案:对3.在有穷自动机中,两个状态是等价的条件是()。

答案:A和B4.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即()答案:单词5.设∑为{a,b},则a,ba,{},Ø都是∑上的正规式。

答案:对6.以下( )不是DFA的组成部分。

答案:初始状态集合7.在有穷自动机中,有穷自动机的状态s和t不等价,则称这两个状态是可区别的。

答案:对8.“由大写字母组成的、以Z开头并且不以Z结尾的字符串”的正则表达式是()答案:Z [a-Z]*[A-Y]9.下面( )是词法分析的理论基础。

答案:有穷自动机第三章1.高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。

答案:自顶向下2.下面哪种分析方法是自顶向下分析()。

答案:LL(1)3.推导是一个替换序列,每一步都是对()进行替换,形成一个从单独的结构名开始,结束于一串记号符号的过程。

编译原理中间代码生成

编译原理中间代码生成

编译原理中间代码生成在编译原理中,中间代码生成是编译器的重要阶段之一、在这个阶段,编译器将源代码转换成一种中间表示形式,这种中间表示形式通常比源代码抽象得多,同时又比目标代码具体得多。

中间代码既能够方便地进行优化,又能够方便地转换成目标代码。

为什么需要中间代码呢?其一,中间代码可以方便地进行编译器优化。

编译器优化是编译器的一个核心功能,它能够对中间代码进行优化,以产生更高效的目标代码。

在中间代码生成阶段,编译器可以根据源代码特性进行一些优化,例如常量折叠、公共子表达式消除、循环不变式移动等。

其二,中间代码可以方便地进行目标代码生成。

中间代码通常比较高级,比目标代码更具有表达力。

通过中间代码,编译器可以将源代码转换成与目标机器无关的形式,然后再根据目标机器的特性进行进一步的优化和转换,最终生成目标代码。

中间代码生成的过程通常可以分为以下几步:1.词法分析和语法分析:首先需要将源代码转换成抽象语法树。

这个过程涉及到词法分析和语法分析两个步骤。

词法分析将源代码划分成一个个的词法单元,例如标识符、关键字、运算符等等。

语法分析将词法单元组成树状结构,形成抽象语法树。

2.语义分析:在语义分析阶段,编译器会对抽象语法树进行静态语义检查,以确保源代码符合语言的语义规定。

同时,还会进行类型检查和类型推导等操作。

3.中间代码生成:在中间代码生成阶段,编译器会将抽象语法树转换成一种中间表示形式,例如三地址码、四元式、特定的中间代码形式等。

这种中间表示形式通常比较高级,能够方便进行编译器的优化和转换。

4.中间代码优化:中间代码生成的结果通常不是最优的,因为生成中间代码时考虑的主要是功能的正确性,并没有考虑性能的问题。

在中间代码生成之后,编译器会对中间代码进行各种优化,以产生更高效的代码。

例如常量折叠、循环优化、死代码删除等等。

5.中间代码转换:在完成了中间代码的优化之后,编译器还可以对中间代码进行进一步的转换。

这个转换的目的是将中间代码转换成更具体、更低级的形式,例如目标机器的汇编代码。

编译原理第三版答案

编译原理第三版答案

编译原理第三版答案第一章答案1.问题:什么是编译器?答案:编译器是一种将源程序转换为目标程序的软件工具。

它负责对源代码进行词法分析、语法分析、语义分析和代码生成等一系列操作,最终生成可执行的目标程序。

2.问题:编译器的主要任务是什么?答案:编译器的主要任务是将高级语言程序转换为能被计算机硬件执行的机器码。

它包括了对源代码进行词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。

3.问题:编译器的工作过程是什么?答案:编译器的工作过程分为多个阶段。

首先是词法分析,将源代码拆分成一个个的词法单元。

然后是语法分析,根据语法规则构建语法树。

接着是语义分析,对语法树进行检查,确保程序的语义正确。

之后是中间代码生成和优化,将语法树转换为更加高效的中间代码。

最后是目标代码生成,将中间代码转换为特定的目标机器代码。

4.问题:编译器的优化技术有哪些?答案:编译器的优化技术包括了常量折叠、公共子表达式消除、循环优化、函数内联和代码重排等。

这些技术可以提高程序的执行效率和优化代码的空间利用率。

5.问题:编译器的应用领域有哪些?答案:编译器广泛应用于软件开发领域。

它们被用于将高级语言转换为目标机器码,用于开发操作系统、编程语言和应用软件等。

第二章答案1.问题:什么是有限自动机(DFA)?答案:有限自动机是一种表示有限状态和状态之间转换关系的模型。

它可以根据输入字符进行状态转换,最终决定是否接受某个字符串。

2.问题:有限自动机的主要组成部分是什么?答案:有限自动机主要由状态集合、输入字符集、转移函数、初始状态和接受状态集合组成。

3.问题:什么是正则表达式?答案:正则表达式是一种用于描述字符串模式的表达式。

它由普通字符和特殊字符组成,可以用于匹配符合条件的字符串。

4.问题:正则表达式的常用操作符有哪些?答案:正则表达式的常用操作符包括了字面量字符、字符类、重复操作符、选择操作符和位置操作符等。

5.问题:正则表达式如何转换为有限自动机?答案:正则表达式可以通过字面化、连接、选择和闭包等操作转换为等价的有限自动机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

13. E5 → E3 + E4 E5.PLACE = newtemp() = T2 emit (T2, =, c , +, d) 15. E6 → (E5) E6.PLACE = E5.PLACE = T2 16. E7 → E2 * E6 E7.PLACE = newtemp() = T3 emit (T3, =, T1 , * , T2 ,) 17. A → i := E7 emit (a, = , T3)
(5) T → integer { } {
T.TYPE=integer; T.WIDTH=4; T.TYPE=real; T.WIDTH=8;
(6) T → real
}
五、赋值语句的翻译
赋值语句实例: abc:=1; a:=1+2; b:=a+b*c; 赋值语句的文法表示: A → i := E E→i E → - E1 E →(E1) E→E1 op E2 …
例子:a:=-b*(c+d)的语法分析
步骤 0 1 2 3 4 5 6 7 8 符号栈 i i := i := i := - i i := - E1 i := E2 i := E2 * i := E2 * ( 归约步骤 源程序 a := - b * ( c + d ) := - b * ( c + d ) -b*(c+d) b*(c+d) *(c+d) *(c+d) *(c+d) (c+d) c+d)
(4) newtemp() 生成一个新的临时变量,返回其整数编码。 (5) entry(i) 在符号表中查找符号 i ,如果存在,则返回它 在符号表中的位置。 (6) emit (x = y op z) 生成一个新的三地址语句,添加到中间代码 表的结尾。(注:指针ip指向中间代码表的结 尾,emit将新的三地址语句添加到ip指向的位 置,然后ip自动加1,指向新的结尾。)
语义子程序实例
(1) E → E1 + E2 { E.VAL := E1.VAL + E2.VAL } (2) E → i { E.VAL := i.VAL }
分析输入串“i+i‖时,语义分析与语法分 析同步进行。由语法分析判断输入串 “i+i‖是否合法,由语义分析计算“i+i‖ 的值。
yacc中的语义子程序
语义子程序
A → i := E { P=entry(); if(P!=0) emit (P = E.PLACE); else error(); } E → i { P=entry(); if(P!=0) E.PLACE=P; else error(); }
E → - E1 { E.PLACE=newtemp(); emit (E.PLACE = - E1.PLACE); } E →(E1) { E.PLACE = E1. PLACE } E→E1 op E2 { E.PLACE=newtemp(); emit(E.PLACE = E1.PLACE op E2.PLACE); }
归约时(ZXY),语义值保存到新符号(Z)中:

状态栈 Z.XXX 语义栈
Z
符号栈
可见:在每一次归约时,都必须保存符号的语义值。
4. 语义动作和语义子程序
每当用一个产生式进行匹配或归约时,需要 执行相应的动作对语义值进行操作,这些动 作称为语义动作。 每个产生式对应一个语义子程序,负责完成 相应的语义动作。 每当用一个产生式进行匹配或归约时,相应 的语义子编号 名字 … … … a b … … … … 地址 … … 1000 1004
13
14 …
c
d …

… …
1008
1012 …
代码
数据
语法制导翻译
随着语法分析的进行,语义子程序依次被调 用,逐步生成中间代码(和相关数据)。语 法分析完成时,也就获得了完整的与源代码 等价的中间代码。 在语法分析的过程中,由各个产生式对应的 语义子程序对源代码进行翻译(生成中间代 码)的方法称为语法制导翻译。
中间代码有不同的表现形式(如三地址代码、 四元式、后缀式、语法树等),本课程采用 三地址代码的形式。 三地址代码常用的语句形式有以下几类:
(其中,op为一元或二元运算符,rop为关系
运算符,x、y、z为操作数。)
常用的三地址语句形式
(1) x = y op z (二元运算) (2) x = op y(一元运算) (3) x = y(赋值) (4) goto x(无条件转移) (5) if x goto y(条件转移) (6) if x rop y goto z(条件转移)
2. 语义分析和语法分析的关系
语法分析只能判断一个句子是否合法,不能给出句 子的含义。句子的含义是通过语义分析体现出来的。 例:一个计算程序对表达式“i+i‖的分析过程。 表达式文法G(E) : E→E+E|E–E|E*E|E/E E→i
仅执行语法分析
#
i # E #
+ E #
i + E #
E + E #
1. goto语句的翻译
goto语句实例: goto L; goto L1; goto L2; goto语句的文法表示: S → goto lable 根据标号lable是否已定义,分为两种情况:
(1) lable已定义
… L: // 将L加入符号表,定义否为“已”,地 址为其后第一个三地址语句的地址。 … goto L; // 查符号表,取出L的地址xxx,生成三 地址语句 goto xxx。 … goto L; // 同上 …
三、语义变量和语义函数
语义子程序中常用到的变量和函数: (1) 表示符号 i 对应的变量的名称。 (2) E.PLACE 表示符号E对应的变量在符号表中的位置(普 通变量)或整数编码(临时变量)。 (3) enter(NAME, TYPE, OFFSET) 将一个新的符号加入符号表。
E1 → i E2 → - E1
9 10 11 12 13 14 15 16 17 18
i := E2 * ( i i := E2 * ( E3 i := E2 * ( E3 + i := E2 * ( E3 + i i := E2 * ( E3 + E4 i := E2 * ( E5 i := E2 * ( E5 ) i := E2 * E6 i := E7 A
中间代码实例
源语句 a: = - b * c + d 对应的中间代码为 (1) t1 = - b (2) t2 = t1 * c (3) t3 = t2 + d (4) a = t3 注意:语义分析不仅要生成中间代码,还需 要生成相关的数据(存放在相应的表格中)。
语义分析的结果
中间代码表
编号 三地址语句 … … 100 101 102 103 … … … t1 = - b t2 = t1 * c t3 = t2 + d a = t3 … … … 11 12
语义栈
移进时(C、D),语义值同步入栈:
状态栈 D C X 符号栈 D.XXX C.XXX X.XXX 语义栈
归约时(YCD),语义值保存到新符号(Y)中:
状态栈 Y X 符号栈 Y.XXX X.XXX 语义栈
中间代码表
编号 三地址语句 … 100 ip → 101 … T1 = - b T2 = c + d T3 = T1 * T2 a = T3
102 103 104
六、控制语句的翻译
语句级控制结构是语言用来构造各种语句执 行顺序的机制。 传统语言有3种语句级控制结构: 1. 顺序 2. 选择 3. 重复
符号表
名字 类型

定义否 地址
… L
… … …
标号 已
… 108
三地址语句 … (n) goto 108 …
(2) lable未定义
… goto L; // 生成三地址语句 goto 0,将L加入符号表, 类型为“标号”,定义否为“未”,地址为本三地址语句的 地址。 … goto L; // 生成三地址语句 goto ?,与符号表中L的地 址组成一个链表(“拉链”),更新L的地址为本三地址语 句(链首)的地址。 … goto L; // 同上 … … L: // ―回填”三地址语句链表,更新符号表中L的 地址,定义否改为“已” 。 …
E3 → i
E4 → i E5 → E3 + E4 E6 → (E5) E7 → E2 * E6 A → i := E7
+d) +d) d) ) ) )
例子:a:=-b*(c+d)的翻译
4. E1 → i 中间代码表 E1.PLACE = entry() = b 编号 三地址语句 5. E2 → - E1 … … E2.PLACE = newtemp() = T1 ip → 100 T1 = - b emit ( T1, =, -,b) 101 9. E3 → i E3.PLACE = entry() = c 12. E4 → i E4.PLACE = entry() = d
实例分析:
main1.c + lex3.l + yacc5.y
二、中间代码
编译程序的任务是将源程序翻译成目标程序。 因此,编译程序的语义分析不仅要操作各符 号的语义值,还需要完成源程序中各个语句 的翻译,将源代码翻译成目标代码。 通常情况下,由于通用性和优化的考虑,语 义分析生成的目标代码并不是最终的与硬件 相关的汇编代码或机器代码,而是某种特定 形式的中间代码。
E #
分析结果:“i+i‖是一个合法的表达式
结合了语义分析的语法分析
相关文档
最新文档