编译原理课程设计参考选题
编译原理设计题目

编译原理设计题目设计原则:1.使用了《编译原理》中的某些内容,如原理、概念等;2.具有完整性,表现或演示了某种完整的功能;3.实用性,有一定的应用价值。
设计目的:花了足够的时间,做了一定量的工作,从而使得水平提高。
设计语言:任意熟悉的开发环境。
设计步骤:1.选好题目2.思考你将要把软件编成什么模样?3.写出需求分析4.开始设计5.测试第一大类:充分利用《编译原理》1.与表达式有关的内容:●表达式计算器:这是一款算术表达式计算程序,用户通过输入表达式达到计算的目的,可代替目前普遍使用的计算器。
使用了编译原理中的词法分析、算符优先分析等。
根据功能的不同可分为:⏹无符号整数表达式计算器:输入无符号整数表达式,输出结果。
难度:较难。
工作量:中等。
⏹整数表达式计算器:考虑负数。
难度:较难。
工作量:中等。
⏹定点实数表达式计算器:难度:较难。
工作量:中等。
⏹通用表达式计算器:考虑1.23e-2的形式输入。
难度:难。
工作量:中等。
●函数表达式计算程序:这是一款能计算函数值的实用程序,用户输入含有自变量x的函数表达式被电脑接受后,可接着输入自变量x的值,电脑输出函数值y的值。
用户可以是数学、物理等教师,他们可以在上课教授与函数有关的课程时进行课堂演算,也可以在备课时验证数据;用户也可以是工程技术人员和学生。
使用了词法分析、算符优先分析。
根据功能的不同可以分为:⏹多项式函数计算程序:只处理多项式函数,如f(x)=x^3+x^2+5等。
难度:较难。
也可设计成其他专用函数计算程序,如幂函数计算、三角函数计算等。
但要避免出现不同用,如不要设计成仅能处理f(x)=2^x的幂函数,因为这样的函数利用普通编程就能实现,无法体现编译原理。
工作量:中等。
⏹通用初等函数计算程序:能处理所有的初等函数的计算。
如f(x)=3*sin(x/2+3.1415)+x^2等。
难度:难(因为涉及到函数名称和参数的识别问题)。
工作量:较大。
⏹二元或多元函数的计算:请参考立体解析几何中相关方程。
编译原理课程设计选题

编译原理课程设计选题一、教学目标本节课的教学目标是使学生掌握编译原理的基本概念、原理和方法,培养学生运用编译原理解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解编译原理的基本概念,如编译器、解释器、源程序等;(2)掌握编译过程的各个阶段,如词法分析、语法分析、语义分析、中间代码生成、目标代码生成等;(3)熟悉常见编程语言的编译原理及其特点。
2.技能目标:(1)能够使用编译器或解释器对简单程序进行编译或解释;(2)能够运用编译原理分析程序的正确性和性能问题;(3)具备编写简单的编译器或解释器的能力。
3.情感态度价值观目标:(1)培养学生对编译原理的兴趣和好奇心,激发学生主动学习的动力;(2)培养学生团队协作、沟通交流的能力,提高学生解决实际问题的能力;(3)培养学生追求真理、勇于创新的精神风貌。
二、教学内容本节课的教学内容主要包括以下几个部分:1.编译原理概述:介绍编译器、解释器、源程序等基本概念,使学生了解编译原理的应用范围和重要性。
2.编译过程及其各个阶段:详细讲解编译过程的词法分析、语法分析、语义分析、中间代码生成、目标代码生成等阶段,使学生掌握编译过程的基本方法。
3.常见编程语言的编译原理:分析C、Java、Python等常见编程语言的编译原理及其特点,使学生了解不同编程语言的编译机制。
4.编译器设计实例:以一个简单的编译器为例,讲解编译器的实现方法和技巧,让学生具备编写简单编译器的能力。
三、教学方法为了提高教学效果,本节课将采用以下教学方法:1.讲授法:教师讲解编译原理的基本概念、原理和方法,引导学生掌握知识要点。
2.案例分析法:通过分析具体编程语言的编译实例,使学生了解编译原理在实际应用中的作用。
3.实验法:安排课后实验,让学生动手编写简单的编译器或解释器,提高学生的实践能力。
4.讨论法:学生分组讨论,鼓励学生提出问题、分享心得,培养学生的团队协作和沟通能力。
四、教学资源为了支持教学内容和教学方法的实施,本节课将采用以下教学资源:1.教材:《编译原理》(作者: Alfred V. Aho et al.);2.参考书:《计算机编译原理》(作者:陈意云);3.多媒体资料:PPT课件、视频教程等;4.实验设备:计算机、编程环境等。
编译原理习题参考答案

程序设计语言与编译——语言的设计与实现(第2版)习题4答案4-5 解:上下文有关文法(1型文法),产生的语言L(G){=a i b i c i | i≥1,i为整数} 4-6 解:3型文法,L(G)={a i | i≥1,i为奇数}4-7 解:2型文法,L(G)={a i b i | i≥1,i为整数}4-8 解:1型文法,L(G)={a i b i c i | i≥1,i为整数}4-9 解:1. 最左推导最右推导S⇒ (A) ⇒ (B) ⇒(SdB) S⇒ (A) ⇒ (B) ⇒ (SdB)⇒ ((A)dB) ⇒ ((B)dB) ⇒ (SdS) ⇒ (Sda)⇒ ((S)dB) ⇒ ((b)dB) ⇒ ((A)da ⇒ ((B)da)⇒ ((b)dS) ⇒ ((b)da) ⇒ ((s)da⇒ ((b)da)2. 语法树4-10解:1. 因为存在推导S ⇒ SbF ⇒ SbP ⇒ Sbc ⇒ Fbc ⇒ FaPbc所以FaPbc是文法G (S) 的一个句型。
2. 语法树4-11解:因为串aaabaa可有下列两棵不同的语法树所以文法G (S)是二义文法。
因为串i(*可有下列两棵不同的语法树9-2解:(1)消除文法G的②产生式直接左递归。
A→SeA' | fA' ③A'→dA' | ε④(2)消除间接左递归:按S.A排序,将S的①产生式代入③有A→AaeA' | AbeA' | ceA' | fA' ⑤(3)消除⑤的直接左递归有A→ceA'A" | fA'A" ⑥A"→aeA'A" | beA'A" | ε⑦(4)对S的①产生式提公因子有S→AB | c ⑧B→| a | b ⑨(5)最后,文法G提取公因子,消除左递归后的产生式由⑧, ⑨, ⑥, ⑦和④组成,无多余的产生式。
编译课程设计题目

文档不可少的内容:1.实现原理2.算法思想以及算法流程图3.程序中主要函数和子函数功能说明以及其调用关系图4.程序代码及运行结果5.心得体会参考题目一:1.题目:从右线性文法构造与之等价的有限自动机的程序实现设计内容及要求:构造一转换程序,实现将用户任意给定的右线性文法,转换为与之等价的有限自动机FA M,输出其状态转换矩阵(显示输出或输出到文件中)。
2.题目:从有限自动机构造与之等价的右线性文法的程序实现设计内容及要求:构造一转换程序,实现将用户任意给定的有限自动机FA M,转换为与之等价的右线性文法,显示输出或输出到文件中。
3.题目:从NFA构造与之等价的正规式r的程序实现设计内容及要求:对给定的任意NFA M(其状态转换矩阵及初态、终态信息分别保存在指定文件中)。
构造一程序,从NFA构造与之等价的正规式r,并显示输出。
4.题目:把NFA确定化为DFA 的算法实现设计内容及要求:构造一程序,实现:将给定的NFA M(其状态转换矩阵及初态、终态信息保存在指定文件中),确定化为DFA M’。
(要先实现ε-CLOSURE函数和Ia函数)。
输出DFA M’(其状态转换矩阵及初态、终态信息保存在指定文件中)。
5 LL(1)分析过程模拟设计内容及要求:对于任意输入的一个LL(1)文法,构造其预测分析表。
要求:首先实现集合FIRST(X)构造算法和集合FOLLOW(A)构造算法,再实现教材P.79给出的预测分析表构造算法,最后能够对任意的句子进行LL(1)分析,程序显示输出预测分析表和LL(1)分析过程或输出到指定文件中。
5.题目:识别文法活前缀的DFA构造程序的实现设计内容及要求:构造一程序,对任意给定的文法G:①构造并输出G 的所有LR(0)项目规范簇;②构造并输出识别文法活前缀的DFA(输出其状态转换矩阵)。
6.题目: LR(0)分析器自动构造程序的实现设计内容及要求:对任意给定的文法G,构造识别文法活前缀的DFA,输出DFA的状态转化矩阵及LR(0)项目集规范族;实现LR(0)分析表构造算法;实现LR分析器总控程序。
编译原理课程设计-LL1文法分析器设计C++语言实现

集美大学计算机工程学院编译原理课程设计报告选题名称:LL(1)文法分析院(系):计算机工程学院专业:计算机科学与技术班级:计算1412指导教师:付永刚学年学期:2016 ~ 2017 学年第 2 学期2017 年06 月29 日摘要:选题要求:根据某一文法编制调试LL(1) 文法语法分分析程序,以便对任意输入的符号串进行分析。
本次课程设计的目的主要是加深对预测分析LL(1)文法语法分析法的理解。
具体如下:1、对语法规则有明确的定义;2、编写的分析程序能够对给定文法进行正确的语法分析;3、对输入给定的文法,手工计算FIRST、FOLLOW集合和select集合,应能判断识别是否为给定文法的句子,并给出推导过程。
4、对输入给定的文法,由程序自动构造FIRST、FOLLOW集合。
5、对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程。
关键词:语法分析;FIRST集合;FOLLOW集合;分析表一、设计内容及要求(1) 基于PL/0语言,通过编程判断该文法是否为LL(1)文法;(2)计算出文法的First() Follow()(3)构造相应文法的预测分析表(4)对某个输入句子进行语法分析二、实现原理1.LL(1)文法LL(1)文法是一类可以进行确定的自顶向下语法分析的文法。
就是要求描述语言的文法是无左递归的和无回溯的。
根据LL(1)文法的定义,对于同一非终结符A的任意两个产生式A:=a和A:=b,都要满足:SELECT(A:=a )∩SELECT(A:=b)=Ø。
(1)文法的左递归当一个文法是左递归文法时,采用自顶向下分析法会使分析过程进入无穷循环之中。
所以采用自顶向下语法分析需要消除文法的左递归性。
文法的左递归是指若文法中对任一非终结符A有推导AÞA…,则称该文法是左递归的。
左递归又可以分为直接左递归和间接左递归。
●直接左递归若文法中的某一产生式形如A→Aα,α∈V*,则称该文法是直接左递归的。
《编译原理》设计方案报告

《编译原理》课程设计报告设计题目:pl0编译器设计一、PL0程序的文法及,指令及属性翻译简化c语言文法定义(LL(1)文法)C程序::=void main(){函数体}函数体::=变量定义部分语句列变量定义部分::=变量定义变量定义部分| ɛ变量定义::=int 变量表变量表::=标识符|标识符,变量表语句列::=语句语句列| ɛ语句::=条件语句| 循环语句| 读语句| 写语句| 复合语句| 表达式语句| 空语句条件语句::=if(表达式)语句循环语句::=while(表达式)语句读语句::=read(变量表);写语句::=write(表达式表);复合语句::={语句列};表达式语句::=表达式;空语句::=;表达式定义(算符优先文法)表达式::=变量=表达式| 变量+=表达式| 变量-=表达式| 变量*=表达式| 变量/=表达式| 变量%=表达式| 表达式1表达式1::=表达式1 || 表达式2 | 表达式2表达式2::=表达式2&&表达式3 | 表达式3表达式3::=表达式3==表达式4 | 表达式3!=表达式4 | 表达式3>=表达式4 | 表达式3>表达式4 | 表达式3<=表达式4 | 表达式3<表达式4 | 表达式4表达式4::=表达式4+表达式5 | 表达式4-表达式5 | 表达式5表达式5::=表达式5*表达式6 | 表达式5/表达式6 |表达式5/表达式6 |表达式6表达式6::=!表达式7表达式7::=(表达式) | 变量| 常量PL0文法定义《程序》::=《分程序》.《分程序》::=《常量定义》;《常后分程序》|《常后分程序》《常后分程序》::=《变量定义》;《变后分程序》|《变后分程序》《变后分程序》::=《过程定义》;《变后分程序》|《语句》《常量定义》::=const 《常量定义表》《常量定义表》::=id = number | id = number,《常量定义表》《变量定义》::= var 《变量表》《变量表》::=id | id,《变量表》《过程定义》::=procedure id ;《分程序》《语句》::=《赋值语句》|《条件语句》|《循环语句》|《读语句》|《写语名》|《复合语句》| 《过程调用语句》|ε《赋值语句》::=id := 《表达式》《读语句》::=read(《变量表》)《写语句》::=write(《表达式表》)《表达式表》::=《表达式》| 《表达式》,《表达式表》《条件语句》::=if 《条件表达式》then 《语句》《循环语句》::=while 《条件表达式》do 《语句》《复合语句》::=begin 《语句列》end《过程调用语句》::=call id《参量表》::=《有参表》|ε《有参表》::=《表达式》,《有参表》|《表达式》《表达式》::=+《表达式1》|-《表达式1》|《表达式1》《表达式1》::=《表达式1》+《表达式2》|《表达式1》-《表达式2》|《表达式2》《表达式2》::=《表达式2》*《表达式3》|《表达式2》/《表达式3》| 《表达式2》mod 《表达式3》|《表达式3》《表达式3》::=id | number | (《表达式》)《条件表达式》::=《条件表达式》or 《条件表达式1》|《条件表达式1》《条件表达式1》::=《条件表达式1》and 《条件表达式2》| 《条件表达式2》《条件表达式2》::=not 《条件表达式3》|《条件表达式3》《条件表达式3》::=(《条件表达式》)|《关系表达式》《关系表达式》::=《表达式》>《表达式》《关系表达式》::=《表达式》>=《表达式》《关系表达式》::=《表达式》<《表达式》《关系表达式》::=《表达式》<=《表达式》《关系表达式》::=《表达式》=《表达式》《关系表达式》::=《表达式》#《表达式》PL0栈式机指令指令格式:指令码(f) 所在层数差(l),操作数(a)PL0栈式机指令:LIT:将常数a取到栈顶LOD:将位于(当前层-l)层处的变量a取到栈顶STO:将栈顶处值存储到指定位置,l,a同上CALL 调用当前-l层处的过程aINT:为调用过程在栈中开辟数据区,a为单元个数JMP:无条件转移指令,a目标地址JPC:条件转移指令,栈顶值的布尔值为非真时转移到a处,否则执行下面语句OPR:关系运算或算术运算PL0属性翻译MCONST(const:常量定义开始), V AR(var:变量定义开始), PROCEDURE(procedure:过程定义开始),CALL(call:过程调用语句),BEGIN(begon:复合语句开始),END(end:复合语句结束),IF(if:条件语句开始),THEN(then:条件结束),WHILE(while:循环语句开始), DO(do:循环条件结束), READ(read:读语句),WRITE(write:输出语句), ODD(odd:判奇运算),//分隔符、运算符号DOT(点:.),COMMA(逗号:,), SEMICOLON(分号:;), LPAREN(左括号:(), RPAREN(右括号:)), ASSIGNOP(赋值::=), PLUSOP(加法运算符号:+), MINUSOP(减法运算符:-), MULTOP(乘法运算符:*), DIVOP(除法运算符:/),GT(大于:>),GE(大于等于:>=),LT(小于:<),LE(小于等于:<=),EQ(等于:=),NE(不等:#),ENDF(输入结束符),//分析过程中需要的非终结符号SERVERKEY(保留字), FACTOR(因子),ROP(关系运算), CONSTANT(常量部份定义), V ARIABLE(变量部份定义), IDENT(自定义标识符), NUMBER(常数)二、符号表的结构,组织,填写及查找1、符号表结构const char *pName; //符号名称int kind; //符号类别,由上面单词分类确定int val; //符号表中的位置值int level; //符号的层数int parent; //符号的作用域int size; //过程长度char strBuff[MAXLENSTR]; //符号堆2、符号表的组织符号表的组织方式有:线性表、散列表、树结构等,其必须维持源程序中的作用域信息。
编译原理实验选题

编译原理实验选题请同学们在以下几个实验中选择一个题目来完成实验,也可以自选一个题目,但是难度级别不能低于给出的实验难度。
最后递交具体的实验报告及源程序(打印稿)。
注意:严禁抄袭、拷贝,否则不计分!实验一有限自动机●有限自动机的运行(推荐):设计一个确定的有限自动机,写出状态转换函数,或画出状态图,编制程序,输入一个字符串,程序能判别该字符串是否能被该有限自动机的接受,可以考虑输出能否接受的同时,输出状态路径。
难度:一般。
⏹整数的判断:写出整数的正规式,画出状态图,写出状态转换函数。
编出程序。
难度:简单。
⏹同上的过程还可以进行:正偶数的判断、自然数的判断、定点数的判断等。
⏹实数的判断:过程同上。
难度:一般。
●逻辑运算分析:可对关系表达式进行分析,并得出结果。
这个设计结果可改变后用于电路分析、谓词演算等。
难度:较难。
附录一词法分析器生成工具FLEX简介1.FLEX简介单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。
FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。
FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C 语言代码。
LEX源文件的扩展名习惯上用.l表示。
FLEX通过对源文件的扫描自动生成相应的词法分析函数int yylex(),并将之输出到名规定为lex.yy.c的文件中。
实用时,可将其改名为lexyy.c。
该文件即为LEX的输出文件或输出的词法分析器。
也可将int yylex()加入自已的工程文件中使用。
2.模式简介LEX的模式的格式(也称为规则)是机器可读的正规表达式,正规表达工是用连接、并、闭包运算递归生成的。
为了方便处理,LEX在此基础上增加了一些运算。
下列是按运算优先级由高往低排列的LEX的正规表达式的运算符。
“\[]^-?.*+|()/${}%<>关于LEX的模式定义,可参见下页附表1.13.LEX源文件格式LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。
编译原理题库

1.【单选题】文法:G:S→xSx | y所识别的语言是()A.B.C.D.答案:D难易程度:中2.【单选题】给定文法A→bA|ca,为该文法句子的是()A.bbaB.cabC.bcaD.cba答案:C难易程度:中3.【单选题】设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子有()A.ab0B.a0b01C.a0b0aD.bc10答案:D难易程度:中4.【单选题】文法G产生的()的全体是该文法描述的语言。
A.句型B.终结符集C.非终结符集D.句子答案:D难易程度:中5.【单选题】若文法G定义的语言是无限集,则文法必然是()A.递归的B.上下文无关的C.二义性的D.无二义性的答案:A难易程度:中6.【单选题】乔姆斯基(Chomsky)把文法分为四种类型,即0型、1型、2型、3型。
其中3型文法是()A.非限制文法B.正规文法C.上下文有关文法D.上下文无关文法答案:B难易程度:中7.【单选题】一个上下文无关文法G包括四个组成部分,它们是一组非终结符号,一组终结符号,一个开始符号,以及一组()A.句子B.产生式C.单词D.句型答案:B难易程度:中8.【单选题】若一个文法是递归的,则它所产生的语言的句子()A.是无穷多个B.是有穷多个C.是可枚举的D.个数是常量答案:A难易程度:中9.【单选题】给定文法A→bA|cc,则符号串①cc ②bcbc ③bcbcc ④bccbcc ⑤bbbcc中,是该文法句子的是()A.①B.③④⑤C.②④D.①⑤答案:D难易程度:中10.【单选题】文法E→E+E|E*E|i的句子i*i+i*i有( )棵不同的语法树。
()A. 1B. 3C. 5D. 7答案:C难易程度:中11.【单选题】文法S→aaS|abc 定义的语言是()A.B.C.D.答案:C难易程度:中12.【单选题】文法G:S→xSx| xS|y所识别的语言是()A.B.C.D.答案:A难易程度:中13.【单选题】由文法的开始符号出发经过若干步(包括0步)推导产生的文法符号序列称为()A.语言B.句型C.句子D.句柄答案:B难易程度:中14.【单选题】下列符号串不可以由符号集S={a,b}上的正闭包运算产生的是()A.εB. aC. aaD. ab答案:A难易程度:中15.【单选题】文法G:S →xxS | y 所识别的语言是()A.B.C.D.答案:D难易程度:中16.【单选题】文法G:S →xS | y 所识别的语言是()A.B.C.D.答案:D难易程度:中17、下面哪些选项不是编译程序的组成部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。
大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义。
大家在进行课程设计时,可从所学内容中选择某个主题,抽象成一个模型,可适当进行简化。
也可按提供给大家的一些参考选题进行设计。
软件开发选择C/C++语言(也可以是你熟悉的任何语言)。
最后每位同学都要认真撰写设计报告,格式要规范,内容要详尽,包括:设计题目,设计目的,设计内容,设计要求,问题的描述及解决的方法、原理、思想、算法(流程图),设计的输入和输出形式,测试、模拟的结果(屏幕拷贝、生成结果的打印输出),总结(体会),源程序清单,等等。
大家应把该门课的课程设计当成对自己学习效果的一次检验,当成是为在大四能够顺利完成毕业设计的一次基本功训练。
希望每个同学尽可能不要都选择完全一样的题目。
大家可以自主选题,或选择我提供的题目,也可以把几个题目合起来做(如开发一个小的编译器)。
鼓励选择有一定技术难度、有一定工作量、综合性较强的题目,在评定成绩时将会给予好的成绩。
编译原理课程设计部分参考选题:1.题目:FORTRAN语言实型常数识别程序设计设计内容及要求:将教材P.41的图3.2(d)识别FORTRAN实型常数的状态转换图用程序实现。
程序能够从用户输入的任意一个字符串中识别出FORTRAN实型常数,显示输出。
2.题目:简化的FORTRAN语言词法分析程序设计设计内容及要求:将教材P.42上的表3.1的词法分析器构造出来,限制条件如教材所述。
保留字的识别按标识符一样识别,通过查找保留字表区分是保留字还是标识符。
程序能够从用户输入的源程序中,识别出的单词符号,并用二元式表示,显示输出或输出到文件中。
3.题目:ε-CLOSURE(I)构造算法的程序实现设计内容及要求:将ε-CLOSURE(I)构造算法用程序实现。
要求:对任意4.题目:从右线性文法构造与之等价的有限自动机的程序实现设计内容及要求:构造一转换程序,实现将用户任意给定的右线性文法,转换为与之等价的有限自动机FAM,输出其状态转换矩阵(显示输出或输出到文件中)。
5.题目:从有限自动机构造与之等价的右线性文法的程序实现设计内容及要求:构造一转换程序,实现将用户任意给定的有限自动机FAM,转换为与之等价的右线性文法,显示输出或输出到文件中。
6.题目:有限自动机的状态转换图显示程序的实现设计内容及要求:构造一程序,实现:将任一给定的有限自动机M(其状态转换矩阵及初态、终态信息保存在指定文件中),在屏幕上显示输出M的状态转换图。
程序应具有通用性,状态节点在屏幕上的分布应合理、美观。
7.题目:从NFA构造与之等价的正规式r的程序实现设计内容及要求:对给定的任意NFAM(其状态转换矩阵及初态、终态信息分别保存在指定文件中)。
构造一程序,从NFA构造与之等价的正规式r,并显示输出。
8.题目:构造正规式r1|r2(或运算)的NFA的程序实现设计内容及要求:对给定的正规式r1、r2,已知它们的NFA分别为M1、M2(其状态转换矩阵及初态、终态信息分别保存在指定文件中)。
构造一程序,由此程序构造正规式r1|r2(或运算)的NFA(将其状态转换矩阵及初态、终态信息保存在指定文件中)。
9.题目:构造正规式r1r2(连接运算)的NFA的程序实现设计内容及要求:对给定的正规式r1、r2,已知它们的NFA分别为M1、M2(其状态转换矩阵及初态、终态信息分别保存在指定文件中)。
构造一程序,由此程序构造正规式r1r2(连接运算)的NFA(将其状态转换矩阵及初态、终态信息保存在指定文件中)。
10.题目:构造正规式r*(闭包运算)的NFA的程序实现设计内容及要求:对给定的正规式r,已知其NFA为M(其状态转换矩阵及初态、终态信息保存在指定文件中)。
构造一程序,由此程序构造正规式r*(闭包运算)的NFA(将其状态转换矩阵及初态、终态信息保存在指定文件中)。
11.题目:基于语法制导构造正规式的NFA在此语法分析器的基础上,按照语法制导的思想,增加构造NFA的功能。
生成的NFA将其状态转换矩阵及初态、终态信息保存在指定文件中。
进一步实现把NFA确定化为DFA的算法(其状态转换矩阵及初态、终态信息保存在指定文件中)。
12.题目:DFA M状态最少化的程序实现设计内容及要求:构造一程序,实现:将给定的DFAM(其状态转换矩阵及初态、终态信息保存在指定文件中)的有限状态集S划分成若干互不相交的子集,使得:任何不同的两个子集中的状态都是可区别的,而同一子集中的任何两个状态都是等价的(要利用Ia函数,但并不需要构造ε-CLOSURE函数,因这是DFA)。
输出化简后的DFA M’(其状态转换矩阵及初态、终态信息保存在指定文件中)。
13.题目:把NFA确定化为DFA的算法实现设计内容及要求:构造一程序,实现:将给定的NFAM(其状态转换矩阵及初态、终态信息保存在指定文件中),确定化为DFA M’。
(要先实现ε-CLOSURE函数和Ia函数)。
输出DFAM’(其状态转换矩阵及初态、终态信息保存在指定文件中)。
14.题目:基于贪心算法的DFA的程序实现设计内容及要求:采用贪心算法实现教材P.62表3.5的DFA,要求从输入串中匹配最长的子串。
输出所有识别出的符号串及其词形。
15.题目:根据句型的推导构造其语法分析树的程序实现设计内容及要求:构造一程序,实现:接受用户任意输入的一个句型的推导序列,生成该句型的语法分析树并显示输出。
程序应具有通用性,语法分析树的节点在屏幕上的分布要合理、美观。
16.题目:从语法分析树构造句型所有的推导的程序实现设计内容及要求:构造一程序,实现:接受用户任意输入的一个句型的语法分析树(其表示存于指定文件中),生成该语法分析树中包含的该句型的所有推导(显示输出)。
17.题目:递归下降分析程序的实现设计内容及要求:对文法G:E→E+T|T构造出G的递归下降分析程序。
程序显示输出T→T*F|F匹配过程(即自上而下生成语法分析树的步骤,F→(E)|i输出各匹配产生式序号即可)。
18.题目:集合FIRST(X)构造算法的程序实现19.题目:集合FOLLOW(A)构造算法的程序实现设计内容及要求:首先,构造一程序,实现教材P.78的FIRST(X)集合的构造算法。
对任一给定的文法G,程序输出所有非终结符P的FIRST(P)。
在此基础上,构造一程序,实现教材P.79的FOLLOW(A)集合的构造算法。
对任一给定的文法G,程序输出所有非终结符A的FOLLOW (A)。
20.题目:预测分析表构造算法的程序实现设计内容及要求:对于给定的一个LL(1)文法,假定所有非终结符号P的集合FIRST(P)和集合FOLLOW(P)都已知,构造其预测分析表(实现教材P.79给出的预测分析表构造算法)。
对教材P.79给出的例4.7构造出预测分析表。
程序显示输出预测分析表或输出到指定文件中。
21.题目:预测分析表自动构造程序的实现设计内容及要求:对于任意输入的一个LL(1)文法,构造其预测分析表。
要求:首先实现集合FIRST(X)构造算法和集合FOLLOW(A)构造算法,再实现教材P.79给出的预测分析表构造算法。
程序显示输出预测分析表或输出到指定文件中。
22.题目:预测分析程序的实现设计内容及要求:对文法G:E→E+T|T按教材P.76表4.1构造出G的预测分析程序,T→T*F|F程序显示输出如P.78那样的匹配过程。
F→(E)|i23.题目:集合FIRSTVT(P)构造算法的程序实现设计内容及要求:构造一程序,实现教材P.91的FIRSTVT(P)集合的构造算法。
对任一给定的算符文法G,程序输出所有非终结符P的FIRSTVT(P)。
24.题目:集合LASTVT(P)构造算法的程序实现设计内容及要求:构造一程序,实现教材P.91的LASTVT(P)集合的构造算法。
对任一给定的算符文法G,程序输出所有非终结符P的LASTVT(P)。
25.题目:算符优先分析算法的程序实现设计内容及要求:对文法G:E→E+T|T采用教材P.90表5.1,实现P.93描述的算符优先T→T*F|F分析算法。
程序显示输出“移进-归约”的步骤。
F→P↑F|P设计内容及要求:对文法G:E→E+T|T采用教材P.98表5.3,实现P.93描述的算符优先T→T*F|F分析算法。
程序显示输出“移进-归约”的步骤。
F→(E)|i要编制各出错处理子程序。
27.题目:优先表构造算法的程序实现设计内容及要求:实现教材P.92优先表构造算法。
对任一给定的算符优先文法G,假定所有非终结符P的FIRSTVT(P)、LASTVT(P)均已知。
以教材P.90例5.4文法为例,程序生成表5.1优先表。
28.题目:优先表自动构造程序的实现设计内容及要求:对任一给定的算符优先文法G,构造其优先表。
要求:首先实现对于非终结符P的FIRSTVT(P)构造算法和LASTVT(P)构造算法,再实现教材P.92给出的优先表构造算法。
以教材P.90例5.4文法为例,程序生成表5.1优先表。
29.题目:优先函数构造程序的实现设计内容及要求:构造一程序,实现:根据优先关系表构造优先函数。
输入的优先表假定保存在指定文件中,构造出的优先函数可显示输出,或输出到指定文件中。
30.题目:消除左递归算法的程序实现设计内容及要求:构造一程序,实现教材P.70消除左递归算法。
对于用户任意输入的文法G,输出一个无左递归的等价文法,可显示输出,或输出到指定文件中。
31.题目:消除回溯算法的程序实现设计内容及要求:构造一程序,实现:消除文法每一条产生式候选式的公共左因子。
对于用户任意输入的文法G,输出一个无回溯的等价文法,可显示输出,或输出到指定文件中。
32.题目:LR分析器总控程序的实现设计内容及要求:对P.101中的文法,按图5.5LR分析表构造LR分析器。
要求程序按P.102例5.7那样,对于输入串i*i+i,输出LR分析器的工作过程。
33.题目:识别文法活前缀的NFA构造程序的实现设计内容及要求:构造一程序,对任意给定的文法G:①构造并输出G的所有LR(0)项目;②用这些LR(0)项目构造并输出识别文法活前缀的NFA(输出其设计内容及要求:构造一程序,对任意给定的文法G,构造识别文法活前缀的DFA,输出DFA 的状态转化矩阵及LR(0)项目集规范族。
要求按教材P.107所给的ITEMSETS(G’)构造,要实现CLOSURE(I)、GO(I,X)函数。
按P.105例5.8给出测试结果,可输出到指定文件中。
35.题目:LR(0)分析表构造算法的程序实现设计内容及要求:构造一程序,实现LR(0)分析表构造算法。