“编译原理”课程的研讨式教学初探.docVIP

“编译原理”课程的研讨式教学初探.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理算法的形象教学 摘要:本文探讨如何在“编译原理”教学过程中形象地演示复杂的算法过程,提出了一个演示算法步骤的方案,展示算法步骤的进行以及步骤进行时的数据联动,对于不同的动作、不同意义的数据,用图形元素和颜色加以区分,并以LR分析算法为例说明了如何分解复杂步骤,如何用图形和颜色展示移进、归约、接受、出错等分析动作以及相关数据的变化。br  关键词:算法演示;形象教学;编译原理;LR算法分析br  br  编译原理的每个阶段,从词法分析、语法分析,直到代码生成,包含大量的算法。很多算法过程较为复杂,比如语法分析的LR分析过程包含很多步骤,不同的动作,如移进、归约、接受等,涉及的数据结构包括堆栈、表、流等,要形象地展示这些元素,使学生较为轻松地接受,是一项充满挑战的任务。br  国内外已经有很多人从事可视化演示计算机科学的算法工作,比如纽约大学计算机系的算法可视化项目(/algvis/),以及北京航空航天大学教学用的PL/0编译系统的可视化跟踪软件(/)。br  我们课题组曾经尝试运用Flash动画展示编译原理的算法,图1是郑宏老师等设计的DFA简化算法演示截图。br  本文探讨如何借助形象的教学方式清晰展示这些复杂的算法,使学生较为轻松地理解。我们以LR分析算法为例,说明如何以不同的颜色展示算法的步骤、不同的动作和每一步的相关数据,形成一个动态形象展示算法的课件。br  br  1算法演示方案br  本节我们介绍一个展示算法的方案,并以LR分析算法[1-2]说明。br  算法一般包括以下要素:步骤、动作、数据,这里仅分析LR算法步骤中包括的动作及联动的数据。根据当前输入符号和分析栈顶的状态来查分析表,并以此决定下一步的动作,包括移进、归约、接受、出错四类,每一类涉及的数据操作又各不相同。主要数据结构包括:输入记号流缓冲、分析栈、分析表和产生式表。分析动作中以归约最复杂,涉及产生式、栈顶若干符号和状态的弹出、压入归约后的符号、转移到新的状态等子动作。br  算法演示方案包含以下要素:br  界面上包含算法过程中涉及的数据结构br  能够逐步演示算法从开始到结束的每一个步骤,复杂步骤最好能分解成小步骤br  用颜色或闪烁等手段突出显示算法的动作关联br  因此,要清晰展示LR分析算法的步骤、动作和相关数据的变化过程,必须在演示界面上显示分析表、分析栈、输入符号流、产生式等数据,如图2所示。br  br  一个动作要执行时,我们用特殊的颜色、闪烁或者高亮表示该动作及其关联的数据。动作执行完毕,更新显示所有涉及的数据,如分析栈数据及指针、输入符号流指针等。对于较复杂的动作,我们进行分解演示,每个分解动作也对相关数据进行特殊显示。br  这些动作的分解和涉及的数据操作如表1所示。br  根据表1所列的动作分类,在演示过程中按照对应的演示方法逐步演示,直到程序接受或者出错为止。较为复杂的归约动作发生时,显示的界面如图3所示,该归约动作完成后程序界面如图4所示。br  在图3中,分析栈当前状态为5,当前输入记号(token)为’$’,归约动作为r1,将要用规则1(E-T+E)进行归约。归约时,分析栈将弹出栈顶的3个符号(‘E’, ‘+’和‘T’)以及3个状态(5,3和2),回到状态3。归约动作完成后,分析栈顶被压入新的非终结符E,并由状态3转移到新的状态5,如图4所示。br  br  通过这些分步演示,学生可以清楚地观察到LR分析算法的动作以及数据结构的动态变化,理解LR分析算法的各个步骤。br  2演示软件的设计和实现br  在演示软件的开发过程中,我们按照以下要求设计:br  算法模块和演示模块独立设计。br  算法模块的实现要考虑到演示需要,比如复杂的步骤要分成子动作,子动作完成后要等待显示,接受到下一步的指令后再进行下一个子动作,所有子动作完成后进行下一步骤。br  这两个模块既相互独立又互相耦合,主程序调用算法模块,每进行一个步骤或者一个子步骤后,再调用相应的显示模块显示进行的步骤以及相关联的数据和变化。br  能适应不同的例子。br  由于算法模块是独立的,因此很容易适应不同的输入例子。这也是比用Flash动画设计演示软件更具优势的一方面。br  程序示例可以按一定规则写成文本,演示软件能读入示例文本并加以解析,初始化相应的数据结构。图5为图3、图4例子的部分输入文本。br  br  因此LR算法演示程序的流程如图6所示。br  br  图中的LR单步分析引擎根据分析表的内容进行移进、归约等动作,每个动作如果有子动作,则单步执行子动作,等待用户指示进入下一个子动作。br  我们的LR算法演示程序用Visual C++实现,运行于Windows操作系统上。br  3结论

文档评论(0)

kaku + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8124126005000000

1亿VIP精品文档

相关文档