奥鹏易百

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

帮助中心知识拓展客服QQ 515224986
查看: 554|回复: 0

大工20秋《编译原理基础》辅导资料八

[复制链接]

1万

主题

2

回帖

2万

积分

论坛元老

积分
29240
发表于 2021-3-7 15:41:35 | 显示全部楼层 |阅读模式
扫码加微信
编译原理基础辅导资料八主    题:第三章语法分析
学习时间:2020年11月16日--11月22日“不忘初心、牢记使命”主题理论学习:
“一带一路”是促进共同发展、实现共同繁荣的合作共赢之路,是增进理解信任、加强全方位交流的和平友谊之路。中国政府倡议,秉持和平合作、开放包容、互学互鉴、互利共赢的理念,全方位推进务实合作,打造政治互信、经济融合、文化包容的利益共同体、命运共同体和责任共同体。
摘选自《推动共建丝绸之路经济带和21世纪海上丝绸之路的愿景与行动》内    容:
我们这周主要学习第三章语法分析的语言和文法相关内容,希望通过下面的内容能使同学们加深对本章相关知识点的理解。
教学目标:
LL文法
LR文法
重点和难点:
重点:
上下文无关文法
语法分析
消除左递归、提取左因子
First集和Follow集定义
LL(1)文法
非递归的预测分析
非上下文无关的语言构造
自下而上分析
LR分析器
构造SLR分析表
LR(1)、LALR
非二义且非LR的上下文无关文法
二义文法
难点:
LL分析表构造
LR分析表构造语法分析
一、上下文无关文法的特点
二、正规式和上下文无关文法的比较


三、分离词法分析器理由
简化设计
编译器的效率会改进
编译器的可移植性加强
便于编译器前端的模块划分
四、验证文法产生的语言
G : S ( (S ) S | (          L(G) = 配对的括号串的集合       
按推导步数进行归纳:推出的是配对括号串
归纳基础: S ( (
归纳假设:少于n 步的推导都产生配对的括号串
归纳步骤:n 步的最左推导如下:
                        S ( (S )S (* (x) S (* (x) y
五、自上而下分析


1、如何避免问题
如果要用自上而下的方法进行分析,就必须避免例子中出现的问题。
每一步推导,不能因为左递归的存在而使得推导过程陷入死循环。
每一步推导,可以选择的产生式必须是唯一的。
2、消除左递归
文法中存在左递归时,为了采用自上而下的分析方法,必须采取方法消除左递归。
3、基本思想
寻找输入符号串的最左推导。
试图根据当前输入单词确定使用哪个产生式。
4、基本过程
从S出发,构造输入符号串(Token)的最左推导。
从根开始,按与最左推导相对应的顺序,构造输入符号串(Token)的语法分析树。本章练习题:
(一)选择题
1、形式语言中,不包含(              )
A. 上下文有关文法    B.上下文无关文法    C. 短语文法   D.句子文法
答案:D
2、设有语言L(G)={有相同个数(n个,n ( 1)的a和b组成的句子},满足对语言L(G)描述的正确文法是(          )。
A. S( abS | a
B. S( aSbS | bSaS | b
C. S( aSb | ab | (
D. S( SS | aSb | bSa | ab | ba
答案:C问答题1、对于文法:
S→aSbS|bSaS|ε
给出句子abab的一个推导。答案:
最左推导S?aSbS?abS?abaSbS?ababS?abab
S?aSbS?abSaSbS?abaSbS?ababS?abab
最右推导S?aSbS?aSb?abSaSb?abSab?abab
S?aSbS?aSbaSbS?aSbaSb?aSbab?abab拓展资料优秀程序员的七大特征,你具备几条
世界上的很多事情都是有规律的,就像 《高效能人士的七个习惯》,优秀的程序员也有七个主要特征。这些特征有些是先天具备的,也就是天赋,但有些是在日常的编程工作中学习、进步、积累、总结获得的。每个程序员都想知道自己是不是一个优秀的程序员,那么,就参考一下下面这 7 条,看看自己是否达到了做一个优秀程序员的标准。
1、喜欢帮助他人,照顾比自己差的程序员

程序员的脾气通常很大,常常会和客户、同事,甚至老板在程序问题上发生争执。优秀的程序员能够站在对方的立场上想问题,能理解客户的无知、初级程序员的无能、老板的无奈,他总能用最大耐心来帮助他人,帮助同事,帮助新来的员工,使他们能快速成长。
2、对编程有激情

很多程序员干这一行只是为了挣钱,如果有更好的职业,他们会毫不犹豫的辞掉程序员的工作。而优秀的程序员热爱编程,喜欢钻研代码中的问题,他们感到能指挥电脑来帮助人们和自己解决现实生活中的问题是一种神奇的能力。当遇到问题无法解决时,他们会茶不思、饭不想,无法入睡。
3、君子善假于物

优秀的程序员知道如何能更高效的完成任务,如何更能有效的解决问题。当遇到问题时,不钻牛角尖,善于利用外部工具解决自己的问题,特别是能熟练应用搜索引擎。初级的程序员只会使用百度和百度知道搜索问题,而高级的程序员/优秀程序员使用谷歌和 Stack Overflow 或者 MSDN forums 这类网站寻找更优秀的答案。
4、务实而又灵活

很多程序员有一个共同的特征,就是不喜欢有约束,不喜欢制度,不喜欢签到,不喜欢写日志,不喜欢写测试,不喜欢晨会等等。但优秀的程序员愿意遵守制度,他知道程序员的个人英雄主义是天性,但开发一个正式的项目是一个团队的工作,有集体就要有纪律。而优秀的程序员并不是墨守成规,生搬教条,他们会根据环境的变化、形式的发展来不断调整自己的策略,使制度更好的为工作服务。
5、不仅关心技术方面的知识,同时关注非技术方面的知识

不称职的程序员喜欢临时抱佛脚,只有在需要的时候才去学习。而优秀的程序员会去主动学习各种相关知识,对各种知识来源都有一种开放的心态,而不会象有的人那样固步自封。 而且,并不只局限在跟职业相关的技术类知识,同时他也会学习任何感到有趣的知识,比如沟通技巧等。
6、懂得放弃

在中国做软件的企业里有一个通病,就是喜欢堆砌功能,总梦想做一个大而全、一个万能的、一个放之四海皆可用的软件,但现实情况是,这的软件通常做不成功,很多半途而废。优秀的程序员知道何时如何放弃,当大限临近,人手不够,需求不清时,他们会果断的判断出那些功能应该延后,那些功能应该力保上线。
7、有企业精神

很多程序员喜欢认为自己是打工者,以打工者的身份看待自己,以打工者的心态工作。优秀的程序员会把自己当成企业的主人,他们知道企业的利益和自己休戚相关。而且,优秀的程序员会想象如果自己创办一家企业,需要哪方面的知识,缺少哪方面的技巧。只有将自己放在主人的位置上,你才能真正理解经营一个企业家需要的技能。本内容由易百教育整理发布
网址www.openhelp100.com
QQ 515224986
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|www.openhelp100.com ( 冀ICP备19026749号-1 )

GMT+8, 2024-11-24 10:28

Powered by openhelp100 X3.5

Copyright © 2001-2024 5u.studio.

快速回复 返回顶部 返回列表