北航2002编译原理

合集下载

申优论文 北航本科编译原理大作业

申优论文 北航本科编译原理大作业

How to Design a C++ Object-orientedCompiler罗杨37230118 AbstractThis system is a C++ object-oriented compiler using a extended C0 grammar as the input language. It can generate the assembly code according to the Intel 386 instructions set. You can use the Masm32v10 software to assemble and link the source code to get your 32-bit applications.摘要本系统实现了一个以扩充C0文法为输入语言的采用C++及面向对象思想设计的编译器,可以生成符合386指令集规范的汇编代码,用Masm32v10汇编可生成32位应用程序。

本系统考虑到不同版本的Masm的功能和使用方法的差异,以及用户手工键入汇编,连接命令多有不便,本系统自带了汇编器Ml.exe和连接器link.exe。

正文由于是目标是Windows平台下32位应用程序,有些文法中的功能如输入和输出无法再像16位汇编时调用DOS中断解决,因此对于这些问题我使用Microsoft提供的类似高级语言的设计方法——调用DLL函数来解决。

其实32位汇编语言在函数调用方面已与高级语言相差无异,可以调用系统API,C RunTime甚至是用户DLL中的函数。

本系统是一遍扫描编译程序,采用面向对象的方法进行构建,各个主要部分均抽象成类。

主要的类有:分析器类Parser,符号表管理器类SymbolTableMgr,四元式管理器类QuadrupleMgr,代码生成器类CodeGenerator,错误处理器类ErrorHandler,全局数据流分析器类GDAOptimizer,全局寄存器分配器类GRDOptimizer,局部公共子表达式删除器类CSDOptimizer,以上属于具有明显功能划分和界限区别的―高级类‖,他们的对象在全局main函数中分别构造和删除;系统中还有其它一些既具有数据结构意义又具有功能操作的―中级类‖,它们一般是―高级类‖或―中级类‖的成员,如基本块集合管理器BBSetMgr,由全局数据流分析器类GDAOptimizer构建,并为其它多个优化器类共享;还有一些相对意义上的―低级类‖,它们具有复杂的数据结构,却几乎没有功能操作,通常由―中级类‖或―高级类‖得数组成员进行管理,如项类Item,四元式类Quadruple,其中项类Item代表符号表中的每一项,四元式类Quadruple顾名思义代表一个四元式,并且四元式的三个操作数是指向项Item的指针。

北航编译原理课件 03.词法分析

北航编译原理课件 03.词法分析

3. 词法分析程序算法
北京航空航天大学计算机学院
17
1.单词及内部表示 单词及内部表示: 单词及内部表示
单词名称
BEGIN END FOR DO IF THEN ELSE 标识符 常数(整 常数 整) : + * , ( ) :=
保留字和分界符采用一符一类
记忆符
BEGINSY ENDSY FORSY DOSY IFSY THENSY ELSESY IDSY INTSY COLONSY PLUSSY STARSY COMSY LPARSY RPARSY ASSIGNSY
字母、数字
标识符 无符号整数
单字符分界符
S S S
字母
标 数字
非字母数字
出口
数字

非数字
出口
+ * , 单界 ( ) :
其他字符 非=
出口
双字符分界符
北京航空航天大学计算机学院
S
冒号
=
双界
其他字符
出口 15
查保留字表 读字符
字母、数字
S
字母
标 数字
非字母数字
标识符
非数字
数字

无符号整数 单字符分界符
如:b{ab} = {ba}b {a|b} = {{a} {b}} = (a*b*)*
北京航空航天大学计算机学院 23
例:设 ∑ = { a,b },下面是定义在∑上的正则表达式和正则集合 正则表达式 ba* a(a|b)* (a|b)*(aa|bb)(a|b)* 正则集合
北京航空航天大学计算机学院
北京航空航天大学计算机学院 20
‘*’ : ‘,’ : ‘(’ : ‘)’ : ‘:’ :

11 北航本科编译原理课件 张莉

11 北航本科编译原理课件 张莉

• 但并不是所有展开都是合适的。如上例中循环展开后节省执行了转移和
测试语句:2*30=60语句 (其实,还不止节省60条)。 ∴增加29条省60条 但若循环体中不是一条而是40条语句,则展开后将有40*30条=1200,但省 的仍是60条,就不算优化了。 ∴判断准则:1. 主存资源丰富 处理机时间昂贵 2. 循环体语句越少越好 循环展开有利 (大型机)
北京航空航天大学计算机学院 6
为什么要优化?
• 有的大型计算程序一运行就要花上几十分钟,甚至好几 小时,这时为优化即使付出些代价也是值得的。 • 另外,程序中的循环往往要占用大量的计算时间。所以 为减少循环执行时间所进行的优化对减少整个程序的运 行时间有很大的意义。 ——尤其有实时要求的程序。如 市场决策,供需及求益的平衡 • 至于(像学生作业之类的)简单小程序(占机器内存,运行 速度均可接受),或在程序的调试阶段,花费许多代价 去进行一遍又一遍的优化就毫无必要了。
北京航空航天大学计算机学院 20
30
BY
3 空间只多二条, 但省了20次测 试时间 (只循环10次)
c) 归纳变量的优化和条件判断的替换 归纳变量(induction varable): 在每一次执行循环迭代的 过程中,若某变量的值固定增加(或减少)一个常量 值,则称该变量为归纳变量(induction variable)。即若 当前执行循环的第j次迭代。归纳变量的值应为c*j+c’, 这里c和c’都循环不变式。 例: for i := 1 to 10 do
a[i] := b[i] + c[i]
1)
2) 优化: 3) 4) 5) 6) 7) 8) 9) 10)
u := 4 labb: if u >40 goto tb := b [u] tc := c [u] t := tb + tc a [ u] := t u := u+4 goto labe :

北京航空航天大学《编译原理》第1章 概论

北京航空航天大学《编译原理》第1章 概论
编译技术
编译原理及编译程序构造
张 莉 教授 史晓华
2006. 9-2007.1
北京航空航天大学计算机学院
课程要求
课时:48学时(1-17周) 分为两部分:(分别计分)
– 理论基础(3学分):课堂教学,按时交作业。 • 作业10分; • 3-6次随堂考试,共计30分;(不补) • 期末闭卷考试,60分 • 主动回答问题,每次奖励0.5分,5分封顶(考前公布) – 实践部分(2学分):上机实践(50机时)(10周开始上机)
北京航空航天大学计算机学院
第一章 概论
(介绍名词术语、了解编译系统的结构和编译过程)
•• 编译的起源:程序设计语言的发展 编译的起源:程序设计语言的发展 •• 基本概念 基本概念 •• 编译过程和编译程序构造 编译过程和编译程序构造 编译技术的应用 •• 编译技术的应用
北京航空航天大学计算机学院
1.1 程序设计语言的发展
能运用所学技术解决实际问题能独立编写北京航空航天大学计算机学院北京航空航天大学计算机学院课程定位课程定位课程定位课程定位计算机学院核心课程计算机学院核心课程计算机学院核心课程计算机学院核心课程分类分类课程名称课程名称课程定位课程定位备注备注计算机基础计算机基础计算机导论入门算法和数据结构高级语言程序设计12基础必备工具计算机理论离散数学离散数学123计算机理论数理逻辑计算机数学集合论和图论组合数学计算机硬件类课程计算机硬件类课程数子电路和数字逻辑硬件基础课程含实验计算机原理和汇编语言部件原理含实验计算机接口与通讯部件间通讯含实验计算机体系结构体系结构含实验计算机网络计算机软件类课程计算机软件类课程编译技术编译技术系统软件层系统软件层含课程设计含课程设计操作系统操作系统含课程设计数据库系统原理含课程设计软件工程信息系统分析与设计应用类计算机图形学多媒体技术应用类北京航空航天大学计算机学院北京航空航天大学计算机学院数字逻辑计算机导论高等数学线性代数计算机原理和汇编语言高级程序设计语言1离散数学数据结构和算法c语言提高数据库系统编译技术编译技术操作系统计算机图形学网络计算机系统结构信息系统软件工程课程间的拓扑关系课程间的拓扑关系接口与通讯1学期学期23456电路分析北京航空航天大学计算机学院北京航空航天大学计算机学院??教材和参考书教材和参考书教材和参考书教材和参考书高仲仪金茂忠编译原理及编译程序构造北航出版社

《编译原理》理论教学大纲

《编译原理》理论教学大纲

《编译原理》理论教学大纲(2001年制订,2004年修订)课程编号:英文名:Compiling Principle课程类别:专业主干课前置课:程序设计基础、数据结构、汇编语言、离散数学后置课:无学分:4学分课时:72课时(其中理论教学54课时,实验教学18课时)主讲教师:苏杭丽等选定教材:吕映之,张素琴,蒋维杜.编译原理.北京:清华大学出版社, 2001年.课程概述:本课程是计算机科学与技术专业的专业主干课程,介绍了程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术方法和一些自动构造工具,如:语言基础知识、词法分析、语法分析、有限自动机理论、形式语言的识别、语义检查、运行时的存储管理、代码优化和代码生成以及整个编译程序的构造过程。

教学目的:掌握编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具,巩固《程序设计语言》、《数据结构》、《汇编语言》、《离散数学》等基础知识,能将编译程序中的概念和技术应用于一般的软件设计之中,能够独立完成小型编译程序。

教学方法:理论讲课与上机实验结合。

首先从剖析一个简单的编译程序(PL/0)入手,对编译程序设计的基本理论,如有穷自动机、上下文无关文法等给予必要的介绍;对于广泛使用的语法分析和语义分析技术,如递归子程序法、算符优先分析、LR分析及语法指导翻译等进行了详细讲解;对编译程序的结构及其各部分功能、实现方法以及整体的设计考虑等给予描述。

此外,还介绍了编译原理的构造工具。

“编译原理”是一门对实践性要求较高的课程,教学中设置了实验课,强化对理论的理解。

各章教学要求及教学要点第一章编译程序概论课时分配:2课时教学要求:了解什么是编译程序;了解编译过程。

教学内容:第一节什么是编译程序一、编译程序的基本知识第二节编译过程概述一、词法分析阶段二、语法分析三、语义分析阶段四、中间代码生成五、代码优化六、目标代码生成第三节编译程序的结构一、编译程序的6个基本过程二、编译程序的两个管理功能第四节编译阶段的组合一、编译的前端二、编译的后端第五节编译技术和软件工具一、语言的结构化编辑器二、语言的调试工具三、语言的测试工具四、高级语言之间的转换工具五、并行编译技术思考题:1.编译程序的工作过程包括哪几个基本阶段?2.介绍词法分析的概念。

北京航空航天大学数理逻辑与编译原理试题

北京航空航天大学数理逻辑与编译原理试题

北京航空航天大学数理逻辑与编译原理试题(2002年)一、(6’x2)在谓词逻辑中将下列命题符号化。

1.存在最小的自然数。

2.对于每个实数都存在比它大的有理数。

二、(6’x2)以下公式是永真式、永假式吗?为什么?1. (p→r) (q→r)→(p q→r)2. (xF(x)↔xG(x))→x(F(x)↔G(x))三、(10’)用归结法证明以下推理的正确性。

张三的每个朋友都是李四的朋友。

因此,每个认识李四的所有朋友的人也认识张三的所有朋友。

四、(6’)对于任意谓词逻辑语句集Γ和任意谓词逻辑公式A,若ΓxA,则存在常元a使得ΓA[x/a]。

五、判断题(1’x5)1.含有优化部分的编译程序的执行效率高。

2.用高级语言书写的源程序都必须通过翻译,产生目标代码后才能投入运行。

3.乔姆斯基(Chomsky)把文法分为四种类型,即0型、1型、2型和3型。

3型文法也称为正则文法,2型文法是短语文法。

4.对于文法G[Z]=(V n,V t,P,Z),V=V n V t,x是文法G[Z]的句型当且仅当Z⇒x,且x∈V*;x是文法G[Z]的句子当且仅当Z⇒x,且x∈V t*。

5.对于文法G[A]:A→aABe|Ba B→dB|ε由于FIRST(aABe) FOLLOW(A)≠∅,并且FIRST(Ba) FOLLOW(A) ≠∅,所以文法G[A]不是LL(1)文法。

六、选择题(1’x5)1.设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子有__________(1)ab0 (2)a0c01 (3)aaa (4)bc102.若一个文法是递归的,则它所产生语言的句子个数__________(1)必定是无穷的(2)是有限个的(3)根据具体情况而定3.对每一个左线性文法G1,__________一个右线性文法G2,使得L(G1)=L(G2)。

(1)一定存在(2)不存在(3)不一定存在(4)无法判定4.正则文法__________二义性的。

编译原理(清华大学-第2版)课后习题答案

编译原理(清华⼤学-第2版)课后习题答案第三章N=>D=> {0,1,2,3,4,5,6,7,8,9}N=>ND=>NDDL={a |a(0|1|3..|9)n且 n>=1}(0|1|3..|9)n且 n>=1{ab,}a nb n n>=1第6题.(1) <表达式> => <项> => <因⼦> => i(2) <表达式> => <项> => <因⼦> => (<表达式>) => (<项>)=> (<因⼦>)=>(i)(3) <表达式> => <项> => <项>*<因⼦> => <因⼦>*<因⼦> =i*i(4) <表达式> => <表达式> + <项> => <项>+<项> => <项>*<因⼦>+<项>=> <因⼦>*<因⼦>+<项> => <因⼦>*<因⼦>+<因⼦> = i*i+i (5) <表达式> => <表达式>+<项>=><项>+<项> => <因⼦>+<项>=i+<项> => i+<因⼦> => i+(<表达式>) => i+(<表达式>+<项>)=> i+(<因⼦>+<因⼦>)=> i+(i+i)(6) <表达式> => <表达式>+<项> => <项>+<项> => <因⼦>+<项> => i+<项> => i+<项>*<因⼦> => i+<因⼦>*<因⼦> = i+i*i第7题第9题语法树ss s* s s+aa a推导: S=>SS*=>SS+S*=>aa+a*11. 推导:E=>E+T=>E+T*F语法树:E+T*短语: T*F E+T*F直接短语: T*F句柄: T*F12.短语:直接短语:句柄:13.(1)最左推导:S => ABS => aBS =>aSBBS => aBBS=> abBS => abbS => abbAa => abbaa 最右推导:S => ABS => ABAa => ABaa => ASBBaa => ASBbaa => ASbbaa => Abbaa => a1b1b2a2a3 (2) ⽂法:S → ABSS → AaS →εA → aB → b(3) 短语:a1 , b1 , b2, a2 , , bb , aa , abbaa,直接短语: a1 , b1 , b2, a2 , ,句柄:a114 (1)S → ABA → aAb | εB → aBb | ε(2)S → 1S0S → AA → 0A1 |ε第四章1. 1. 构造下列正规式相应的DFA (1)1(0|1)*101NFA(2) 1(1010*|1(010)*1)*0NFA(3)NFA(4)NFA2.解:构造DFA 矩阵表⽰b其中0 表⽰初态,*表⽰终态⽤0,1,2,3,4,5分别代替{X} {Z} {X,Z} {Y} {X,Y} {X,Y,Z} 得DFA状态图为:3.解:构造DFA矩阵表⽰构造DFA的矩阵表⽰其中表⽰初态,*表⽰终态替换后的矩阵4.(1)解构造状态转换矩阵:{2,3} {0,1}{2,3}a={0,3}{2},{3},{0,1}{0,1}a={1,1} {0,1}b={2,2}(2)解:⾸先把M的状态分为两组:终态组{0},和⾮终态组{1,2,3,4,5} 此时G=( {0},{1,2,3,4,5} ) {1,2,3,4,5}a={1,3,0,5} {1,2,3,4,5}b={4,3,2,5}由于{4}a={0} {1,2,3,5}a={1,3,5}因此应将{1,2,3,4,5}划分为{4},{1,2,3,5}G=({0}{4}{1,2,3,5}){1,2,3,5}a={1,3,5}{1,2,3,5}b={4,3,2}因为{1,5}b={4} {23}b={2,3}所以应将{1,2,3,5}划分为{1,5}{2,3}G=({0}{1,5}{2,3}{4}){1,5}a={1,5} {1,5}b={4} 所以{1,5} 不⽤再划分{2,3}a={1,3} {2,3}b={3,2}因为 {2}a={1} {3}a={3} 所以{2,3}应划分为{2}{3}所以化简后为G=( {0},{2},{3},{4},{1,5})7.去除多余产⽣式后,构造NFA如下G={(0,1,3,4,6),(2,5)} {0,1,3,4,6}a={1,3}{0,1,3,4,6}b={2,3,4,5,6}所以将{0,1,3,4,6}划分为 {0,4,6}{1,3} G={(0,4,6),(1,3),(2,5)}{0,4,6}b={3,6,4} 所以划分为{0},{4,6} G={(0),(4,6),(1,3),(2,5)}不能再划分,分别⽤ 0,4,1,2代表各状态,构造DFA 状态转换图如下;b8.代⼊得S = 0(1S|1)| 1(0S|0) = 01(S|ε) | 10(S|ε) = (01|10)(S|ε)= (01|10)S | (01|10)= (01|10)*(01|10)构造NFA由NFA可得正规式为(01|10)*(01|10)=(01|10)+9.状态转换函数不是全函数,增加死状态8,G={(1,2,3,4,5,8),(6,7)}(1,2,3,4,5,8)a=(3,4,8) (3,4)应分出(1,2,3,4,5,8)b=(2,6,7,8)(1,2,3,4,5,8)c=(3,8)(1,2,3,4,5,8)d=(3,8)所以应将(1,2,3,4,5,8)分为(1,2,5,8), (3,4)G={(1,2,5,8),(3,4),(6,7)}(1,2,5,8)a=(3,4,8) 8应分出(1,2,5,8)b=(2,8)(1,2,5,8)c=(8)(1,2,5,8)d=(8)G={(1,2,5),(8),(3,4),(6,7)}(1,2,5)a=(3,4,8) 5应分出G={(1,2), (3,4),5, (6,7) ,(8) }去掉死状态8,最终结果为 (1,2) (3,4) 5,(6,7) 以1,3,5,6代替,最简DFA为b正规式:b*a(da|c)*bb*第五章1.S->a | ^ |( T )(a,(a,a))S => ( T ) => ( T , S ) => ( S , S ) => ( a , S) => ( a, ( T )) =>(a , ( T , S ) ) => (a , ( S , S )) => (a , ( a , a ) ) S=>(T) => (T,S) => (S,S) => ( ( T ) , S ) => ( ( T , S ) , S ) => ( ( T , S , S ) , S ) => ( ( S , S , S ) , S )=> ( ( ( T ) , S , S ) , S ) => ( ( ( T , S ) , S , S ) , S ) =>( ( ( S , S ) , S , S ) , S ) => ( ( ( a , S ) , S , S ) , S ) => ( ( ( a , a ) , S , S ) , S ) => ( ( ( a , a ) , ^ , S ) , S ) => ( ( ( a , a ) , ^ , ( T ) ) , S )=> ( ( ( a , a ) , ^ , ( S ) ) , S ) => ( ( ( a , a ) , ^ , ( a ) ) , S ) => ( ( ( a , a ) , ^ , ( a ) ) , a )S->a | ^ |( T )T -> T , ST -> S消除直接左递归:S->a | ^ |( T )T -> S T’T’ -> , S T’ | ξSELECT ( S->a) = {a}SELECT ( S->^) = {^}SELECT ( S->( T ) ) = { ( }SELECT ( T -> S T’) = { a , ^ , ( }SELECT ( T’ -> , S T’ ) = { , }SELECT ( T’ ->ξ) = FOLLOW ( T’ ) = FOLLOW ( T ) = { )}构造预测分析表分析符号串( a , a )#分析栈剩余输⼊串所⽤产⽣式#S ( a , a) # S -> ( T )# ) T ( ( a , a) # ( 匹配# ) T a , a ) # T -> S T’# ) T’ S a , a ) # S -> a# ) T’ a a , a ) # a 匹配# ) T’,a) # T’ -> , S T’# ) T’ S , , a ) # , 匹配# ) T’ S a ) # S->a# ) T’ a a ) # a匹配# ) T’) # T’ ->ξ# ) ) # )匹配# # 接受2.E->TE’E’->+E E’->ξT->FT’T’->T T’->ξF->PF’F’->*F’F’->ξP->(E) P->a P->b P->∧SELECT(E->TE’)=FIRST(TE’)=FIRST(T)= {(,a,b,^)SELECT(E’->+E)={+}SELECT(E’->ε)=FOLLOW(E’)= {#,)}SELECT(T->FT’)=FIRST(F)= {(,a,b,^}SELECT(T’ —>T)=FIRST(T)= {(,a,b,^)SELECT(T’->ε)=FOLLOW(T’)= {+,#,)}SELECT(F ->P F’)=FIRST(F)= {(,a,b,^}SELECT(F’->*F’)={*}SELECT(F’->ε)=FOLLOW(F’)= {(,a,b,^,+,#,)}3. S->MH S->a H->Lso H->ξK->dML K->ξL->eHf M->K M->bLM FIRST ( S ) =FIRST(MH)= FIRST ( M ) ∪FIRST ( H ) ∪{ξ}∪{a}= {a, d , b , e ,ξ} FIRST( H ) = FIRST ( L ) ∪{ξ}= { e , ξ}FIRST( K ) = { d , ξ}FIRST( M ) = FIRST ( K ) ∪{ b } = { d , b ,ξ}FOLLOW ( S ) = { # , o }FOLLOW ( H ) = FOLLOW ( S ) ∪{ f } = { f , # , o }FOLLOW ( K ) = FOLLOW ( M ) = { e , # , o }FOLLOW ( L ) ={ FIRST ( S ) –{ξ} } ∪{o} ∪FOLLOW ( K )∪{ FIRST ( M ) –{ξ} } ∪FOLLOW ( M )= {a, d , b , e , # , o }FOLLOW ( M ) ={ FIRST ( H ) –{ξ} } ∪FOLLOW ( S )∪{ FIRST ( L ) –{ξ} } = { e , # , o }SELECT ( S-> M H) = ( FIRST ( M H) –{ξ} ) ∪FOLLOW ( S )= ( FIRST( M ) ∪FIRST ( H ) –{ξ} ) ∪FOLLOW ( S )= { d , b , e , # , o }SELECT ( S-> a ) = { a }SELECT ( H->L S o ) = FIRST(L S o) = { e }SELECT ( H ->ξ) = FOLLOW ( H ) = { f , # , o }SELECT ( K->ξ) = FOLLOW ( K ) = { e , # , o }SELECT ( L-> e H f ) = { e }SELECT ( M->K ) = ( FIRST( K ) –{ξ} ) ∪FOLLOW ( M ) = {d,e , # , o }SELECT ( M -> b L M )= { b }4 . ⽂法含有左公因式,变为S->C $ { b, a }C-> b A { b }C-> a B { a }A -> b A A { b }A-> a A’ { a }A’-> ξ{ $ , a, b }A’-> C { a , b }B->a B B { a }B -> b B’ { b }B’->ξ{ $ , a , b }B’-> C { a, b }5. <程序> --- S <语句表>――A <语句>――B <⽆条件语句>――C <条件语句>――D <如果语句>――E <如果⼦句> --FS->begin A end S->begin A end { begin }A-> B A-> B A’ { a , if }A-> A ; B A’-> ; B A’ { ; }A’->ξ{ end }B-> C B-> C { a } B-> D B-> D { if }C-> a C-> a { a }D-> E D-> E D’ { if }D-> E else B D’-> else B { else }D’->ξ{; , end } E-> FC E-> FC { if }F-> if b then F-> if b then { if }⾮终结符是否为空S-否A-否A’-是B-否C-否D-否D’-是E-否F-否FIRST(S) = { begin }FIRST(A) = FIRST(B) ∪FIRST(A’) ∪{ξ} = {a , if , ; , ξ} FIRST(A’) ={ ; , ξ}FIRST(B) = FIRST(C) ∪FIRST(D) ={ a , if }FIRST(C) = {a}FIRST(D) = FIRST(E)= { if }FIRSR(D’) = {else , ξ}FIRST(E) = FIRST(F) = { if }FIRST(F) = { if }FOLLOW(S) = {# }FOLLOW(A) = {end}FOLLOW(A’) = { end }FOLLOW(B) = {; , end }FOLLOW (C) = {; , end , else }FOLLOW(D) = {; , end }FOLLOW( D’ ) = { ; , end }FOLLOW(E) = { else , ; end }FOLLOW(F) = { a }S A A’ B C D D’ E F if then else begin end a b ;6. 1.(1) S -> A | B(2) A -> aA|a(3)B -> bB |b提取(2),(3)左公因⼦(1) S -> A | B(2) A -> aA’(3) A’-> A|ξ(4) B -> bB’(5) B’-> B |ξ2.(1) S->AB(2) A->Ba|ξ(3) B->Db|D(4) D-> d|ξ提取(3)左公因⼦(1) S->AB(2) A->Ba|ξ(3) B->DB’(4) B’->b|ξ(5) D-> d|ξ3.(1) S->aAaB | bAbB(2) A-> S| db(3) B->bB|a4(1)S->i|(E)(2)E->E+S|E-S|S提取(2)左公因⼦(1)S->i|(E)(2)E->SE’(3)E’->+SE’|-SE’ |ξ5(1)S->SaA | bB(2)A->aB|c(3)B->Bb|d消除(1)(3)直接左递归(1)S->bBS’(2)S’->aAS’|ξ(3)A->aB | c(4) B -> dB’(5)B’->bB’|ξ6.(1) M->MaH | H(2) H->b(M) | (M) |b消除(1)直接左递归,提取(2)左公因⼦(1)M-> HM’(2)M’-> aHM’ |ξ(3)H->bH’ | ( M )(4)H’->(M) |ξ7. (1)1)A->baB4)B->a将1)、2)式代⼊3)式1)A->baB2)A->ξ3)B->baBbb4)B->bb5)B->a提取3)、4)式左公因⼦1)A->baB2)A->ξ3)B->bB’4)B’->aBbb | b5)B->a(3)1)S->Aa2)S->b3)A->SB4)B->ab将3)式代⼊1)式1)S->SBa2)S->b3)A->SB4)B->ab消除1)式直接左递归1)S->bS’2)S’->BaS’ |ξ3)S->b4)A->SB5)B->ab删除多余产⽣式4)1)S->bS’(5)1)S->Ab2)S->Ba3)A->aA4)A->a5)B->a提取3)4)左公因⼦1)S->Ab4)A’-> A |ξ5)B->a将3)代⼊1)5)代⼊21)S->aA’b2)S->aa3)A->aA’4)A’-> A |ξ5)B->a提取1)2)左公因⼦1)S-> aS’2)S’->A’b | a3)A->aA’4)A’-> A |ξ5)B->a删除多余产⽣式5)1)S-> aS’2)S’->A’b | a3)A->aA’4)A’-> A |ξA A’S’S将3)代⼊4)1)S-> aS’2)S’->A’b | a3)A->aA ’4)A’-> aA’ |ξ3)S’->a4)S’->b5)A->aA ’6)A’-> aA’ |ξ对2)3)提取左公因⼦1)S->aS’2)S’->aS’’3)S’’->A’b|ξ4)S’->b5)A->aA ’6)A’-> aA’ |ξ删除多余产⽣式5)1)S->aS’2)S’->aS’’3)S’’->A’b|ξ4)S’->b第六章1S → a | ∧ | ( T )T → T , S | S解:(1) 增加辅助产⽣式 S’→#S#求 FIRSTVT集FIRSTVT(S’)= {#}FIRSTVT(S)= {a ∧ ( }= { a ∧ ( } FIRSTVT (T) = {,} ∪ FIRSTVT( S ) = { , a ∧ ( }求 LASTVT集LASTVT(S’)= { # }LASTVT(S)= { a ∧ )}LASTVT (T) = { , a ∧ )}(2)因为任意两终结符之间⾄多只有⼀种优先关系成⽴,所以是算符优先⽂法(3)a ∧( ) , #F 1 1 1 1 1 1g 1 1 1 1 1 1f 2 2 1 3 2 1g 2 2 2 1 2 1f 3 3 1 3 3 1g 4 4 4 1 2 1f 3 3 1 3 3 1g 4 4 4 1 2 1(4)栈优先关系当前符号剩余输⼊串移进或规约#<·( a,a)# 移进#( <· a ,a)# 移进#(T <·, a)# 移进#(T,<· a )# 移进#(T,a ·> ) # 规约#(T,T ·> ) # 规约#(T =·) # 移进#(T) ·> #规约#T =·#接受4.扩展后的⽂法S’→#S# S→S;G S→G G→G(T) G→H H→a H→(S)T→T+S T→S(1)FIRSTVT(S)={;}∪FIRSTVT(G) = {; , a , ( }FIRSTVT(G)={ ( }∪FIRSTVT(H) = {a , ( }FIRSTCT(H)={a , ( }FIRSTVT(T) = {+} ∪FIRSTVT(S) = {+ , ; , a , ( }LASTVT(S) = {;} ∪LASTVT(G) = { ; , a , )}LASTVT(G) = { )} ∪LASTVT(H) = { a , )}LASTVT(H) = {a, )}LASTVT(T) = {+ } ∪LASTVT(S) = {+ , ; , a , ) }构造算符优先关系表因为任意两终结符之间⾄多只有⼀种优先关系成⽴,所以是算符优先⽂法(2)句型a(T+S);H;(S)的短语有:a(T+S);H;(S) a(T+S);H a(T+S) a T+S (S) H直接短语有: a T+S H (S)句柄: a素短语:a T+S (S)最左素短语:a(3)(4)不能⽤最右推导推导出上⾯的两个句⼦。

北航编译原理课件 08.错误处理

15
北京航空航天大学计算机学院
3.目标程序运行时错误检测与处理 目标程序运行时错误检测与处理. 目标程序运行时错误检测与处理 下标变量下标值越界 计算结果溢出 动态存储分配数据区溢出 · 在编译时生成检测该类错误的代码。 在编译时生成检测该类错误的代码。 对于这类错误,要正确的报告出错误位置很难,因为 对于这类错误,要正确的报告出错误位置很难,因为 要正确的报告出错误位置很难 目标程序与源程序之间难以建立位置上的对应关系 一般处理办法: 当目标程序运行检测到这类错误时,就调用异常 处理程序,打印错误信息和运行现场(寄存器和存储 器中的值)等, 然后停止程序运行。
有时候报错不一定十分准确 位置和性质), ),需进一步分析 (位置和性质),需进一步分析
:= B+ *C
缺“]”or n 表达式语法错 m
错误编号

begin ........ i := 1 step 1 ............ end
until n do
北京航空航天大学计算机学院
8
8.4 错误处理技术
发现错误后, 发现错误后,在报告错误的同时还要对错误进行 处理,以方便编译能进行下去。目前有两种处理办法: 处理,以方便编译能进行下去。目前有两种处理办法: 1. 错误改正:指编译诊察出错误以后,根据文法进 错误改正:指编译诊察出错误以后, 行错误改正。 行错误改正。 如:A[i , j :=B+*C 但不是总能做到,如 但不是总能做到 如A:=B-C*D+E) 2. 错误局部化处理:指当编译程序发现错误后,尽可 错误局部化处理:指当编译程序发现错误后, 能把错误的影响限制在一个局部 的范围, 的范围,避免错误扩散和影响 程序其他部分的分析。 程序其他部分的分析。

北航编译原理课件 04.语法分析


北京航空航天大学计算机学院
12
规则二 若有文法规则: ∷ 若有文法规则:U∷=x|y|……|z|Uv 其特点是:具有一个直接左递归的右部并位于最后, 其特点是:具有一个直接左递归的右部并位于最后, 这表明该语法类U是由 是由x或 这表明该语法类 是由 或y……或z其后随有零个 或 其后随有零个 或多个v组成 组成。 或多个 组成。 U⇒Uv ⇒ Uv v ⇒ Uv vv ⇒ …… ⇒ 可以改写为U∷ ∴ 可以改写为 ∷=(x|y|……|z){v} 通过以上两条规则,就能消除文法的直接左递归, 通过以上两条规则,就能消除文法的直接左递归, 并保持文法的等价性。 并保持文法的等价性。
北京航空航天大学计算机学院 21
效率低的原因 1) 语法分析要重做 2) 语义处理工作要推倒重来 设文法G(不具左递归性),U 设文法 (不具左递归性), ∈Vn ), U::= α 1 | α 2 | α 3
R∷=Sa|a ∷ Q∷=Sab|ab|b ∷
S∷=Sabc|abc|bc|c ∷ S∷=(abc|bc|c){abc} ∷
北京航空航天大学计算机学院
19
最后得到文法为: 最后得到文法为 S∷=(abc|bc|c){abc} ∷ Q∷=Sab|ab|b ∷ R∷=Sa|a ∷ 可以看出其中关于Q和R的规则是多余的规则 可以看出其中关于 和 的规则是多余的规则 ∴经过压缩后 S∷=(abc|bc|c){abc} ∷ 可以证明改写前后的文法是等价的
否则 S ∉ L(G[Z])
主要问题: 主要问题 左递归问题 回溯问题
主要方法: 主要方法 • 递归子程序法 • LL分析法 分析法
北京航空航天大学计自底向上分析算法的基本思想为:
+ 若Z ⇐ S

编译原理(第2版)陈意云张昱编著课后答案


8
(b) 对于句子abab构造两个相应的最右推导.
S aSbS aSb abSaSb abSab abab
rm
rm
rm
rm
rm
S aSbS aSbaSbS aSbaSb aSbab abab
rm
rm
rm
rm
rm
(c)对于句子abab构造两个相应的分析树.
S
S
aSbS
(b) 句子a|aa的两种最左推导. 句子aa*的两种最左推导.
R
R
R
R
R
*
(c)消除二义性
R R ‘|’ S | S S ST | T T U* | U U (R) | a | b
aR
*
R
R
a
a
a
28
4.5 dangling-else文法: stmt if expr then stmt | matched-stmt
tcodenumlexval冶膝嘉篮瞄畅耽找捕案赶骂恭凶魏承弹特选虽丰仁宇汀刺蚁疵夷铁蟹暑牡编译原理第2版陈意云张昱编著课后答案编译原理第2版陈意云张昱编著课后答案stcetcetcttcetcttcnumnumttcnumnum俗铸涣甩呕灿樱涨巾陆蕾胯涣吁飞猜放渭溢惕想诊祭冕捌责境楔烦贴玛耀编译原理第2版陈意云张昱编著课后答案编译原理第2版陈意云张昱编著课后答案55s
( bexpr ) bexpr or bterm bterm bfactor bfactor false
11
true
(c) 试说明此文法产生的语言是全体布尔表达式.
12
练习: 长度为n的字符串, 分别有多少个 前缀, 后缀, 子串, 真前缀, 子序列 ? 前缀: n+1 后缀: n+1 子串: 1+ n+(n-1)+...+1 = 1+n(n+1)/2 真前缀: n 子序列: 1+Cn1+Cn2+Cn3+...+Cnn = 2n
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京航空航天大学数理逻辑与编译原理试题
(2002年)
一、(6’x2)
在谓词逻辑中将下列命题符号化。

1.存在最小的自然数。

2.对于每个实数都存在比它大的有理数。

二、(6’x2)
以下公式是永真式、永假式吗?为什么?
1.(p→r)∨(q→r)→(p∨q→r)
2.(∃xF(x)↔∃xG(x))→∃x(F(x)↔G(x))
三、(10’)
用归结法证明以下推理的正确性。

张三的每个朋友都是李四的朋友。

因此,每个认识李四的所有朋友的人也认识张三的所有朋友。

四、(6’)
对于任意谓词逻辑语句集Γ和任意谓词逻辑公式A,若Γ∃xA,则存在常元a使得ΓA[x/a]。

五、判断题(1’x5)
1.含有优化部分的编译程序的执行效率高。

2.用高级语言书写的源程序都必须通过翻译,产生目标代码后才能投
入运行。

3.乔姆斯基(Chomsky)把文法分为四种类型,即0型、1型、2型和3
型。

3型文法也称为正则文法,2型文法是短语文法。

4.对于文法G[Z]=(V n,V t,P,Z),V=V n V t,x是文法G[Z]的句型当
且仅当Z⇒x,且x∈V*;x是文法G[Z]的句子当且仅当Z⇒x,且x∈V t*。

5.对于文法G[A]:
A→aABe|Ba B→dB|ε
由于FIRST(aABe)FOLLOW(A)≠∅,并且FIRST(Ba)FOLLOW(A)≠∅,所以文法G[A]不是LL(1)文法。

六、选择题(1’x5)
1.设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子
有__________
(1)ab0(2)a0c01(3)aaa(4)bc10
2.若一个文法是递归的,则它所产生语言的句子个数__________
(1)必定是无穷的(2)是有限个的(3)根据具体情况而定
3.对每一个左线性文法G1,__________一个右线性文法G2,使得
L(G1)=L(G2)。

(1)一定存在(2)不存在(3)不一定存在(4)无法判定
4.正则文法__________二义性的。

(1)可以是(2)一定不是(3)一定是
5.__________这样一些语言,它们能被确定的有穷自动机识别,但不
能用正则表达式表示。

(1)存在(2)不存在(3)无法判定是否存在
七、填空题(2’x4)
1.有文法G[S]
S→aAcBe A→b
A→Ab B→d
则句型aAbcde的短语是__________,句柄是__________。

2.LL(K)分析法中,第一个L的含义是__________,第二个L的含义
是__________,“K”的含义是__________。

3.根据所涉及程序的范围,优化可分为局部优化,__________和
__________三种。

局部优化是局限于一个__________范围的一种优
化;编译程序进行数据流分析的目的是__________。

4.源程序中的错误一般有词法错误、语法错误、__________和
__________。

对错误的处理方法一般有__________和__________。

八、(4’+6’)
已知文法G[S],其产生式如下:S→(S)|ε
1.L(G[S])是什么?
2.对于(1)的结果,请给出证明。

九、(4’+6’)
设有文法G[S]:
S→(L)|a
L→L,S|S
1.写出一个属性翻译文法,它输出配对括号的个数。

2.写出该属性翻译文法的递归下降翻译子程序。

十、对以下的Pascal程序段采取栈式动态存储分配,试画出过程c第二次
被激活时,运行站内各分程序的活动记录情况。

并说明c中如何访问变量x。

(8’)
program env;
procedure a;
var x:integer;
procedure b;
procedure c;
begin x:=2;b end;{procedure c}
begin c end;{procedure b}
begin b end;{procedure a}
begin a end.{main}
十一、(5’+5’+4’)已知文法G[S]:
S→aSAB|BA A→aA|B B→b
1.构造该文法的LR(0)项目集规范族。

2.构造识别该文法所产生或前缀的DFA。

3.试构造其SLR分析表,并判断该文法是否是SLR(1)文法。

相关文档
最新文档