- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精品文档
精品文档
PAGE
PAGE36
精品文档
PAGE
《编译原理》课程设计报告
—SLR(1)剖析的实现
学 院 计算机科学与技术
专 业 计算机科学与技术
学 号
学 生 姓 名
指导教师姓名
2015年12月26日
目录
1.设计的目的与内容
1
1.1
课程设计的目的
1
1.2
设计内容
1
1.3
设计要求
1
1.4
理论基础
1
2
算法的基本思想
2
2.1
主要功能函数
2
2.2
算法思想
3
SLR文法结构剖析表的主要思想:
3
解决矛盾的方法:
3
SLR语法剖析表的结构方法:
4
3
主要功能模块流程图
5
3.1
主函数功能流程图
5
4
系统测试
6
5
结论
11
附录程序源码清单
12
1.设计的目的与内容
1.1课程设计的目的
编译原理课程设计是计算机专业重要的教学环节,它为学生提供了一个既着手又动脑,将课本上的理论知识和实际有机的结合起来,独立剖析和解决实际问题的时机。
进一步稳固和复习编译原理的基础知识。
培养学生结构化程序、模块化程序设计的方法和能力。
提高学生关于编程语言原理的理解能力。
加深学生关于编程语言实现手段的印象。
1.2设计内容
结构LR(1)剖析程序,利用它进行语法剖析,判断给出的符号串是否为该文法识其他句子,
认识LR(K)剖析方法是严格的从左向右扫描,和自底向上的语法剖析方法。
1.3设计要求
SLR(1)剖析表的生成能够选择编程序生成,也可选择手动生成;
程序要求要配合适合的错误办理体制;
要打印句子的文法剖析过程。
1.4理论基础
由于大部分适用的程序设计语言的文法不能知足 LR(0)文法的条件,即使是描绘一个实数变
量说明这样简单的文法也不一定是 LR(0)文法。因此关于 LR(0)规范族中有矛盾的项目集 (状
态)用向前查察一个符号的办法进行办理,以解决矛盾。这种办法将能知足一些文法的需要,因为只对有矛盾的状态才向前查察一个符号,以确定做那种动作,因而称这种剖析方法为简单的LR(1)剖析法,用SLR(1)表示。
算法的基本思想
2.1主要功能函数
class
WF
{
WF
(char
s1
[],
char
s2
[],
int
x,
int
y
)
WF
(const
string
s1
,
const
string
s2
,
int
x,
inty
)
bool
operator
(const
WFa)
const
bool
operator
==
(const
WFa
)
const
void
print
()
};
class
Closure
{
void
print
(stringstr
)
bool
operator
==
(const
Closure
a
)
const
};
void
make_item
()
void
dfs
(const
string
x
)
void
make_first
()
void
append
(const
string
str1
,
const
string
str2
)
bool
_check
(const
vector
int
id
,
const
stringstr
)
void
make_follow
()
void
make_set
()
void
make_V
()
void
make_cmp
(vector
WFcmp1
,
int
i
,
char
ch
)
voidmake_go()
void
make_table
()
void
print
(strings1
,
strings2
,
strings3
,strings4
,
strings5
,
strings6
,
strings7
)
stringget_steps
(int
x
)
stringget_stk
(vector
Tstk
)
stringget_shift
(WFtemp
)
void analyse (stringsrc )
2.2算法思想
SLR文法结构剖析表的主要思想:
很多矛盾性的动作都可能经过考察相关非终结符的 FOLLOW集而获解决。
解决矛盾的方法:
解决矛盾的方法是剖析所有含两个会合不相交,而且也不包含略:
A和B的句型,考察会合FOLLOW(A)和FOLLOW(B),如果这b,那么当状态I面临输入符号a时,我们能够使用如下策
若a=b,则移进。
若a∈FOLLOW(A),则用产生式A→α进行归约;若a∈FOLLOW(B),则用产生式B→α进行归约;其他,报错*SLR的基本算法:
假设LR(0)规范族的一个项目集 I中含有m个移进项目
A1→α?a1β1,A2→α?a2β2,,Am→α?amβm;
同时含有 n个归约项目
B1→α?,B2→α?,,B3→α?,
如果会合{a1, ,am
文档评论(0)