北京工业大学编译原理考试一纸开卷【期末复习总结】
北京工业大学编译原理考试一纸开卷【期末复习总结】

1、简要解释编译程序中的遍(趟)的含义。
就是对源程序或者源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果和目标程序.通常,每遍的工作有外存上获得的前一遍的中间结果开始,完成它所含的有关工作之后,再把结果记录于外存..既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。
2、何为“标识符”?何为“名字”?两者的区别是什么?在程序设计语言中,标识符是一个最基本的概念,其定义为:凡以字母开头的字母数字序列(有限个字符)都是标识符。
当给予某标识符以确切的含义时,这个标识符就叫做名字。
程序语言中各种名字都是用标识符表示的,只是标识符是一个没有意义的字符序列,而名字却有着确切的意义和属性。
3、简述为什么自顶向下的语法分析技术不能处理具有左递归的文法?这是由于在自顶向下的语法分析技术中,要解决的问题是根据当前输入符号判断将栈顶(最左)的非终结符号替换成哪条规则的右部,若文法具有左递归,则在分析过程中,无法判断出替换的规则,造成无穷递归求解的过程。
4、简述编译程序的工作过程编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
5、什么是语法制导翻译?是指在语法规则的制导下,通过计算语义规则,完成对输入符号的翻译。
由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或归约的同时又使用这些语义规则来指导翻译与最终产生目标代码,所以称为语法制导翻译。
6、请简要阐述高级程序设计语言参数传递的常用方式1、传值:计算实参并将其右值传递给被调用过程2、传地址:调用过程将实参地址传递给被调用过程3、传值结果:将传值和传地址两种方式结合4、传名:只有在被调用过程中用到形参时才动态的建立起它与实参的联系7、什么是自展?什么是交叉编译?自展过程就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器——这个新编译器是旧编译器的扩展——的过程。
完整word版,编译原理期末试题(8套含答案+大题集),推荐文档

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
完整word版,编译原理期末试题(8套含答案)详解,推荐文档

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
编译原理试题汇总-编译原理期末试题(8套答案大题集)

编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
编译原理试题汇总+编译原理期末试题(8套含答案+大题集)(完整资料).doc

此文档下载后即可编辑编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
软件学院编译原理试题1

北京工业大学 2009∽2010年度第1学期软件学院【编译原理】考试卷(B)考试形式:一纸开卷考试时间:2010年月日学号姓名一、选择题(16分)1、请从下列供选择的答案中选出与编译过程的各阶段对应的常用方法:(1)词法分析的常用方法有()(2)语法分析的常用方法有()(3)中间代码生成的常用方法有()(4)优化的常用方法有()可选项有:(1) a.有穷自动机理论 b.图灵机c.图论d.无穷自动机理论(2) a.自顶向下匹配 b.自底向上归约c.回溯法d.自顶向下匹配和自底向上归约(3) a. LR方法 b.语法制导翻译方法c.最优匹配法d.递归法(4) a.信息流分析法 b.语义分析法c.数据流分析法d.结构图2、通常编译程序是把高级语言书写的源程序翻译为( (1) ),它包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成、符号表格管理和出错处理等部分。
其中代码优化的目的是加快( (2) )的执行速度,符号表存取方法则影响( (3) )的效率。
可选项有:(1) a.BASIC语言程序 b.中间语言程序c.另一种高级语言程序d.等价的机器语言程序(2)、(3)a.编译程序 b.目标程序 c.源程序d.编译程序和目标程序e.解释程序3、设有文法G[E]: E -> E+E | E*E | (E) | i在下述文法类中,文法G[E]属于()。
(1)算符文法(2)上下文无关文法(3)正规文法(4)二义文法可选项有:a.(1)(2)b.(1)(2)(4)c.(2)(4)d.(1)(4)二、自顶向下的语法分析(20分)给定文法 G[S]:S → aSb | A A → bAc | bBc B → Ba | a试消除文法的左递归、提取左因子,并判断改写后的文法是否为LL(1)文法?并说明理由。
三、自底向上的语法分析(20分)试证明下面的文法G[S]是SLR(1)但不是LR(0)的:G[S]: S → XX → Xb|bYaY → aXc|a|aXb四、(7分)试证明(说明)下面的文法G[S]是二义的:G[S]: S → iSeS|iS|i考虑句子iiiei,存在如下两个最右推导:S => iSeS => iSei => iiSei => iiieiS => iS => iiSeS => iiSei => iiiei五、(7分)写出能产生字母表{a,b}上的不含两个相邻的a,且不含两个相邻的b的全体符号串的有限状态自动机。
《编译原理》期末复习资料汇总

《编译原理》期末复习资料【题1】1.(a|b)*(aa|bb)(a|b)*画出状态转换图。
Ia Ib①1,2,3 2,3,4 2,3,5②2,3,4 2,3,4,6,7,8 2,3,5③2,3,5 2,3,4 2,,3,5,6,7,8④2,3,4,6,7,8 2,3,4,6,7,8 2,3,5,7,8⑤2,3,5,6,7,8 2,3,4,7,8 2,3,5,6,7,8⑥2,3,5,7,8 2,3,4,7,8 2,3,5,6,7,8⑦2,3,4,7,8 2,3,4,6,7,8 2,3,5,7,8Ia Ib1 2 32 4 33 2 54 4 65 7 56 7 57 4 6新的状态转换图如下:(1)A={1,2,3},B={4,5,6,7} Aa={2,4} ×(2)A={1,3},B={2},C={4,5,6,7} Aa={2}⊂B,Ab={3,5} ×(3)A={1},B={2},C={3},D={4,5,6,7}(单元素可以不用看,必有,古先看D)Da={4,7}⊂D,Db={5,6}⊂D,Aa={2}⊂B,Ab={3}⊂C,Ba={4}⊂D,Bb={3}⊂C,Ca={2}⊂B,Cb={5}⊂C,则有baA B CB D CC B DD D D2.(a*|b*)b(ba)*的状态转换图。
Ia Ib①1,2,3,4 2,4 3,4,5,6,8②2,4 2,4 5,6,8③3,4,5,6,8 --- 3,4,5,6,7,8④5,6,8 --- 7⑤3,4,5,6,7,8 6,8 3,4,5,6,7,8⑥7 6,8 ---⑦6,8 --- 7Ia Ib1 2 32 2 43 --- 54 --- 65 7 56 7 ---7 --- 6新的状态转换图如下:化简:(用终结状态与非终结状态,然后输出状态一致分一类)。
(1)A={1,2,6},B={3,4,5,7} Aa={2} ×(2)A={1,2},B={6},C={3,4,7},D={5} Cb={5,6} ×(只要有一个不属于任何一个集合,就不行) (3)A={1,2},B={6},C={3},D={4,7},E={5} Ab={3,4} × (4) A={1},B={2},C={6},D={3},E={4,7},F={5} Aa={2}⊂B ,Ab={3}⊂D ,Ba={2}⊂B ,Bb={4}⊂E ,Ca={7}⊂E ,Db={5}⊂F ,Eb={6}⊂C ,Fa={7}⊂E ,Fb={5}⊂Fa b A B D B B E C E --- D --- F E --- C FEF[注意事项]:[知识要点]:正则表达式:******|,|,)|(,)|(,)(,,|,ab a b a a b a a b a ab ab b a a{}a a aaa aa a a ,,,,*ε⇔;{}b a a b a ,)b (|⇔或;{}ab b a ab ⇔)(和;(){},,,,*ababab abab ab ab ε⇔;()()()(){} ,,,,,,||||*baba aabb aab b a b a b a b a b a ε⇔⇔()*|b a a 是最左边一个字母一定是a ,其余字母为b a 、的任意组合,不包括ε。
(完整word版)编译原理期末考试试卷及答案

第 0 页共 16 页一.填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1)和(2)。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4)、语义分析与中间代码生成,代码优化及(5)。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为(7)。
5.文法符号的属性有综合属性和(8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二.选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个(),以及一组()。
A .字符串B .产生式C .开始符号D .文法2.程序的基本块是指()。
A .一个子程序B .一个仅有一个入口和一个出口的语句C .一个没有嵌套的程序段D .一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。
A .自左向右 B .自顶向下 C .自底向上 D .自右向左 4.在通常的语法分析方法中,()特别适用于表达式的分析。
A .算符优先分析法 B . LR 分析法 C .递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是()。
A .四元式序列B .间接三元式序列C .二元式序列D .机器语言程序或汇编语言程序 6.一个文法所描述的语言是();描述一个语言的文法是()。
A .唯一的 B .不唯一的 C .可能唯一,也可能不唯一7.如果在文法G 中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、简要解释编译程序中的遍(趟)的含义。
就是对源程序或者源程序的中间结果从头到尾扫描一次,并作有
关的加工处理,生成新的中间结果和目标程序.通常,每遍的工作有外存上获得的前一遍的中间结果开始,完成它所含的有关工作之后,再把结果记录于外存..既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。
2、何为“标识符”?何为“名字”?两者的区别是什么?在程序设计语言中,标识符是一个最基本的概念,其定义为:凡以字母开头的字母数字序列(有限个字符)都是标识符。
当给予某标识符以确切的含义时,这个标识符就叫做名字。
程序语言中各种名字都是用标识符表示的,只是标识符是一个没有意义的字符序列,而名字却有着确切的意义和属性。
3、简述为什么自顶向下的语法分析技术不能处理具有左递归的文法?这是由于在自顶向下的语法分析技术中,要解决的问题是根据当前输入符号判断将栈顶(最左)的非终结符号替换成哪条规则的右部,若文法具有左递归,则在分析过程中,无法判断岀替换的规则,造成无穷递归求解的过程。
4、简述编译程序的工作过程
编译程序的工作过程,是指从输入源程序开始到输岀目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别岀一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
5、什么是语法制导翻译?
是指在语法规则的制导下,通过计算语义规则,完成对输入符号的翻译。
由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或归约的同时又使用这些语义规则来指导翻译与最终产生目标代码,所以称为语法制导翻译。
6、请简要阐述高级程序设计语言参数传递的常用方式
1、传值:计算实参并将其右值传递给被调用过程
2、传地址:
调用过程将实参地址传递给被调用过程3、传值结果:将传值和
传地址两种方式结合4、传名:只有在被调用过程中用到形参时才动态的建立起它与实参的联系
7、什么是自展?什么是交叉编译?
自展过程就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器一一' 个新编译器是
旧编译器的扩展一一的过程。
编译器的运行环境与产生程序的运行环境不同的编译过程叫做交叉编译
8、计算机执行用高级语言编写的程序有哪些途径?其主要区别
是什么?
解释和编译。
解释不生成目标代码。
9、自顶向下的语法分析方法中需要解决的主要问题?如何表
示?
主要需要解决回溯与左递归。
回溯:匹配多个候选式无法快速匹配;左递归:推导过程无休止。
解决:提取公共左因子、消除直接及间接左递归。
翻译程序:能够把某种语言转换成另一种语言,而后者与前者在逻辑上是等价的。
语义分析与中间代码产生:对语义分析所识别岀的各类语法范
畴,分析其含义并进行初步翻译(产生中间代码)
编译程序结构:表格管理、岀错处理
编译前端:由与源语言有关但与目标语言无关的那些部分组成,包括词法分析、语义分析、语义分析与中间代码产生。
后端:编译程序中与目标语言有关那些部分,优化与目标代码生
成。
后端不依赖于源语言而仅仅依赖于中间语言。
词法规则是指单词符号的形成规则。
语言的语法规则规定了如何从单词符号形成更大的结构(语法单位)。
二义性:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
LL(1)的含义:第一个L表示从左到右扫描输入串,第二个L表示
最左推导,1表示分析时每一步只需向前查看一个符号
自上而下分析的问题:①文法含有左递归时,分析过程会陷入无限循环②回溯浪费分析时间③某一非终结符用某一候选式匹配成功时,可能是暂时的④分析不成功时,难以找到岀错位置
自下而上分析的问题:怎样判断栈顶的符号串的可归约性,以及如
何归约。
一个句型的最左直接短语称为该句型的句柄。
在形式语言中最右推导常被称为规范推导,由规范推导所得的句型称为规范句型,如果文法无二义的,那么规范推导(最右推导)的逆过程必是规范归约(最左归约)
输入串-----语法树——依赖图-------- 语义规则计算次序
最左规约=规范规约:A
最右推导=规范推导:B
短语:子树的末端结点形成的符号串.
短语相对的句型:整个树的末端结点.
简单子树:只有一层分支的子树
简单短语(直接短语):简单子树的末端结点形成的符号串. 句柄:最左直接短语
素短语:是个短语,并且至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语
上例G〔引:句型Mg的语法时
共有三裸子轲.
三4趣语:血Sfi 简羊範待:H, Sb 勺柄:A
例题1、构造下面文法的LL (1)分析表。
“ TL int | real L 宀id R , id R | £
FIRST ( D) =FIRST (T) ={int, real}
FOLLOW (D) =FOLLOW ( L) ={#}
FIRST ( L) ={id}
FOLLOW (T) ={id}
FIRST (R) ={ , , £}
FOLLOW (R) ={#}
注意当FIRST (X)含£还需要看FOLLOW (X)
例题2、已知文法: A —aAa| £ (1 )该文法是LL (1 )文法吗?为什么?
(2)
若
采用LL ( 1 )方法进行语法分析,如何得到该文法的 LL
(1 )分析表?
(3) 若输入符号串“ aaaa ”,请给出语法分析过程。
1、 不是,因为产生式 A — aAa| £有空产生式右部,而
FOLLOW(A)={#} U FIRST(a)={a, #} 造成 FIRST(A) n FOLLOW(A)={A, £ Q {a, #}工?
2、 修改文法为 A — aaA| £
FOLLOW(A)={#} U FOLLOW(A)={#}, 因而 FIRST(A) n FOLLOW(A)={a, £ n {#}=? 3、
S — (L) | a
L — L , S | S
试写岀一个语法制导定义,它输岀配对括号个数
为S 、L 引入属性h,代表配对括号个数。
语法制导定义如下: 产生式 语义规则 S — (L) S.h:=L.h+1 S — a S.h:=O L — L1 , S L.h:=L1.h+S.
h
L — S L.h:=S.h S '— S print(S.h)
例题 4、S — aS|bS|a
(1) 构造该文法的LR(0)项目集规范族
(2) 构造识别该文法所产生的活前缀的
DFA 。
(3) 构造其SLR 分析表,并判断该文法是否是
SLR(1)文法。
1将文法G(S)拓广为G(S '): S '— S
S — aS
S —bS
S —a
注意到状态I1存在“移进-归纳”冲突,计算S 的FOLLOW 集合: FOLLOW(S)={#}
可以采用SLR 冲突消解法,得到表 5.1所列的SLR 分析表。
从分析表可以看出,表中没有冲突项,所以该文法是SLR(1)文法。
移进归约冲突的解决
以I1为例:可移进 S->a • S 也可归约 S->a • 此时求出以下两个内容:
1、 这个项目集闭包中所有可移进项,即 {S,a,b}
2、 所有可归约项的 FOLLOW 集,即FOLLOW (S ) 若FOLLOW(S)交{S,a,b}为空,则冲突可以解决 (设当前输入符号为 x )若x 属于{S,a,b}则移进 若x 属于FOLLOW ( S )则归约。