一、选择
大部分都是学习通作业里面的原题,貌似只有一题不是
二、简答
1. 对于字符集{a,b},写出每个a后面至少有一个b的所有字符串的正则表达式以及LL1文法
2、判断S--->S*S|S+S|a 是否是二义性文法 (很显然a+a*a有两颗语法树)
3、S-->(L)|D
D-->bc
写出语法制导程序,实现检测括号匹配,例如(a+(a*a))成功匹配则输出括号对数2
否则不成功匹配输出“Not Match”,例如(a+(a*a)
4,写出E的递归下降分析程序
E->(E|$
注:因为代表空的字符打不出来,所以用$代替
5、层数和偏移问题
与之前做的习题(L,N)那题几乎一摸一样
6、静态链与动态链问题
主程序层数为0,其中调用链为main—>A--->B---C---->A
写出C调用A后的静态链与动态链情况。
程序结构图是main包裹着A,A里面包裹着B,B有包裹着C,然后注意C里面是调用A,C并没有包裹A
三,解答题
1、自动机问题,写出(a|b)*(aa|bb)b的非确定自动机表示,并将其确定化后画出DFA图,然后化简后画出最简DFA图
2、LL1文法问题,将所给文法变为LL1文法
要求:消除左递归和公共表达式
(题目不难,但是有一些改动,将以往的最递归产生式例如L->Lb|b这种变为了L->LS|SbL这一种,只需把SbL看成以往的终结符即可解答(个人理解))
3、全局符号表驻留法:
给出一段程序,要求写出扫描到i=a*b时的符号表内容,采用全局符号表驻留法,全局可用起始偏移为off,局部可用起始偏移为off0,主函数层数为0,对于变量,写出名字,种类,类型,层数和偏移,对于过程和函数,不用写出偏移
4、写出一段代码的四元式
(1),写出优化前的中间代码的四元式表示
(2)采用长表达式节省,公共表达式节省以及循环不变外提对四元式进行优化,写出优化后的四元式