编译原理课程设计 LL(1)文法分析器

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

编译原理课程设计 LL(1)文法分析器
编译原理课程设计ll(1)文法分析器
目录
开场白...............................................................1第一章详述.....................................................41.1设计内容....................................................41.2设计建议...................................................4第二章设计的基本原理...........................................42.1预测分析表的形成原理.......................................42.2预测分析程序的分解成.........................................5第三章程序设计.................................................53.1总体方案设计...............................................63.2各模块设计.................................................6第四章程序测试.................................................7第三章程序清单. (8)
1
课程设计
设计题目
ll(1)文法分析器
学生姓名
学号专业班级指导教师
2021年12月
2
合肥工业大学课程设计任务书
设计题目ll(1)文法分析器成绩预测分析表中自动构造程序的同时实现设计内容及建议:对于任一输出的一个ll(1)文法,结构其预测分析表中。

建议:首先同时实现子集first(x)结构算法和子集follow(a)结构算法,再同时实现教材主要内容p.79得出的预测分析表中结构算法。

程序表明输入预测分析表或输入至选定文件中。

预测分析程序的同时实现设计内容及建议:对文法g:e→e+t|t按教材p.76表中4.1结构出来g的预测分析程序,t→t*f|f程序表明输入如p.78那样的相匹配过程。

f→(e)|i指导教师意见该生能按时顺利完成课程设计任务书所规定的程序设计,综合运用所学科学知识单一制分析和解
决问题的能力。

程序设计方案。

论文阐释,文理,格式。

程序运行结果。

程序环评时提问问题。

亲笔签名:
第一章概述
1.1设计内容:
1:预测分析表自动构造程序的实现
2:预测分析程序的同时实现
1.2设计要求
1:设计内容及建议:对于任一输出的一个ll(1)文法,结构其预测分析表中。

建议:首先同时实现子集first(x)结构算法和子集follow(a)结构算法,再同时实现教材p.79得出的预测分析表中结构算法。

程序表明输入预测分析表或输入至选定文件中。

2:设计内容及建议:
对文法g:e→e+t|t按教材p.76表4.1构造出g的预测分析程序,t→t*f|f程序显示输出如p.78那样的匹配过程。

f→(e)|i
第二章设计的基本原理
2.1预测分析表的构成原理
对于任一取值的ll(1)文法g,为了结构它的预测分析表中m,我们就必须结构与文法g 有关的子集first和fellow.首先我们对每一个x∈vtuvn,结构first(x),办法就是,已连续采用下面的规则,直到每个子集first不再减小年才.(1)若x∈vt,,则first(x)={x}.
(2)若x∈vn,且有产生式x->a……,则把a加入到first(x)中,若x->ε,也是一条产
生式,则把ε也加进first(x)中.
(3)若x->y……是一个产生式且y∈vn,则把first(y)中所有非ε-元素都加到
first(x)中,若x->y1y2……yk,就是一个已连续的产生式,y1y2……yi-1都不为终结符,而且,对于任何j,1≤j≤i-1,first(yj)都所含ε(即y1y2……yi-1=>ε),则把
first(yi)中的所有非ε-元素都加进first(x)中,特别就是,若所有的first(yj)均所含ε,j=1,2,……,k,则把ε加进first(x)中.
对于文法g中每个非终结符a构造follow(a)的办法是,连续使用下面的规则,直到每个follow不在增大为止.
(1)对于文法的开始符号s,复置#于follow(s)中;
(2)若a->abb是一个产生式,则把first(b)\\{ε}加至follow(b)中;
(3)若a->ab就是一个产生式,或a->abb就是一个产生式而b=>ε(即为ε∈first(b))则把
follow(a)加至follow(b)中
4
构造分析表m的算法是:
(1)对文法g的每个产生式a->a继续执行第二步和第三步;(2)对每个终结符
a∈first(a),把a->a减至m[a,a]中;
(3)若ε∈first(a),则把任何b∈follow(a)把a->a加至m[a,b]中;(4)把所有无定义的m[a,a]标上出错标志.
2.2预测分析程序的分解成
预测分析程序的总控程序在任何时候都是按stack栈顶符号x和当前的输入符号行事的,对于任何(x,a),总控程序每次都执行下述三种可能的动作之一;(1)若x=a=”#”,则宣布分析成功,停止分析过程.
(2)若x=a≠”#”,则把x从stack栈顶赶出,使a指向下一个输出符号.(3)若x就是一个非终结符,则查阅分析表中m,若m[a,a]中放置着关于x的一个产
生式,那么,首先把x逐出stack栈顶,然后,把产生式的右部符号串按反序一一推进stack栈(若右部符号为ε,则意味着不推什么东西进栈).在把产生式的右部符号推进栈的同时应做这个产生式相应得语义动作,若m[a,a]中存放着”出错标志”,则调用出错诊察程序error.
第三章程序设计
3.1总体方案设计
在看见这个题目后,首先想起的就是必须分模块展开设计.
(1)第一模块:把文本文件中的ll(1)文法读入到程序中grammer类中的数组成员g
中.
(2)第二模块:通过对已输入到数组g中的文法,进行扫描,把相应的非终结符和终
结符输出至非终结符数组vn中和终结符数组vt中.
(3)第三模块:生成所有的非终结符的first集合(4)第四模块:生成所有的非终结符的follow集合(5)第五模块:生成文法的预测分析表(6)第六模块:生成文法的预测分析程序
通过这六模块的设计,最后可以连接成一个预测分析程序.
3.2各模块程序设计
首先必须创建两个类,分别就是grammer类和seqstack类
grammer类中有保存从文本文件读入的ll(1)文法,用一个二维字符数组g保存,保存非终结符的字符数组vn,保存终结符的字符数组vt,文法开始符号字符变量begin,元素对应first集合中的有空字符的非终结符数组emptychar,预测分析表为二维整形数组form.
5。

相关文档
最新文档