ACM在线评测在编译原理实践教学中的应用探讨7页word文档

合集下载

ACM平台在C程序设计教学中的应用

ACM平台在C程序设计教学中的应用

ACM平台在C程序设计教学中的应用
刘宇欣;周秋霞
【期刊名称】《计算机时代》
【年(卷),期】2018(000)003
【摘要】C语言程序设计课程是计算机专业的入门课程之一,程序设计类课程的强实践性要求学生动手编程,勤加练习.ACM在线测试平台有着自动化判题、便于统计分析数据等优点,为学生的自主学习提供了一个园地.不仅如此,ACM平台还可以很好地应用于C程序设计教学的多个环节来辅助教学.通过对ACM平台模块介绍展示其功能,并以实验课、作业、考试为例体现ACM平台辅助教学的途径及优势.实践证明,使用ACM平台辅助教学确实可以提高学生的学习积极性,并取得良好的教学成果.
【总页数】4页(P66-69)
【作者】刘宇欣;周秋霞
【作者单位】岭南师范学院信息工程学院,广东湛江 524048;岭南师范学院信息工程学院,广东湛江 524048
【正文语种】中文
【中图分类】G642
【相关文献】
1.ACM竞赛平台在C语言程序设计教学中的应用研究 [J], 李晔;卢冰;王捷;金保华
2.ACM竞赛平台在C语言程序设计教学中的应用研究 [J], 李晔;卢冰;王捷;金保华;
3.ACM竞赛平台在计算机专业教学中的应用研究 [J], 何迎生;鲁荣波;陈国平;段明秀
4.微信公众平台在C程序设计教学中的应用 [J], 刘光蓉; 周俊博
5.微信公众平台在C程序设计教学中的应用 [J], 刘光蓉; 周俊博
因版权原因,仅展示原文概要,查看原文内容请购买。

基于acm竞赛模式的数据结构实践教学探讨

基于acm竞赛模式的数据结构实践教学探讨

基于acm竞赛模式的数据结构实践教学探讨随着科技的不断发展,计算机的应用范围越来越广泛,数据结构作为计算机科学领域的一个基础概念,越来越受到学生的关注。

在数据结构的学习中,很多人觉得理论知识很容易掌握,但是实践却有很多困难。

因此,基于ACM竞赛模式的数据结构实践教学成为了近年来许多学校推崇的教学方式之一。

一、ACM竞赛模式的概念介绍ACM竞赛,指启发式搜索、贪心算法、动态规划和图论等算法问题的解决。

在ACM竞赛中,问题和策略都是大大小小的信息学竞赛中常见的问题,竞赛的赛制一般是一种团队赛。

ACM竞赛模式的作用在于培养学生综合分析问题、寻找解决方案、协作实现问题解决方案等能力,团队赛模式也有益于调节团队合作气氛。

二、ACM竞赛模式在数据结构教学中的应用1.培养学生对算法的理解数据结构教学过程中,为了帮助学生理解算法,教师往往会对算法进行解释并给出相关实例来协助学生理解。

而在ACM竞赛模式中,学生需要自己分析问题并找出解决问题的算法,因此能够培养学生锻炼思维和分析问题的能力,同时也能深化学生对算法的理解。

2.提高学生代码编写和调试能力在ACM竞赛模式中,学生需要在短时间内完成一个问题的解决方案。

因此,要编写出正确的代码,学生需要有扎实的编程基础和丰富的编程经验。

此外,在实现代码时,学生需要进行调试,并根据调试结果进行代码优化。

这些过程培养学生的程序设计和调试能力。

3.加强学生团队合作意识ACM竞赛模式中,每组由3-5人组成,这种组织形式在一定程度上需要学生互相协作工作。

对于学生来说,这样的组织形式在一定程度上增强了学生的合作意识,增强了学生在协作和团队合理中的实践能力。

三、结语ACM竞赛模式作为一种新型的教学模式,其实践效果在数据结构教学中得到了广泛的认可。

在实践教学过程中,应该采用多种教学手段,注重理论与实践的结合,切实提高学生的学习效果。

编译原理在编程中的应用

编译原理在编程中的应用

编译原理在编程中的应用编译原理是计算机科学中的重要分支,是计算机技术的基础和核心之一。

它主要研究如何将高级程序语言翻译成为低级机器语言,以便让计算机能够理解和执行。

在程序设计和开发过程中,编译原理扮演着至关重要的角色。

本文将从编译原理在编程中的应用角度来探讨其重要性和作用。

一、编译原理的基本概念编译原理是一门关于如何将高级语言转换为机器语言的学科。

它主要由三部分组成:词法分析、语法分析和语义分析。

其中,词法分析是将程序中的字符流划分为词素的过程;语法分析是根据语言的文法规则,将词素组成语法树,以便进行语法分析;语义分析是在语法树的基础上,对程序进行意义分析,以便进行代码生成和优化。

在编译过程中,还有一个重要的环节,即目标代码生成和优化,它是将高级语言翻译成为机器语言的最终结果。

编译器将每个语句翻译成为一组机器指令,然后将这些指令打包成为可执行程序或目标代码,以便计算机可以运行它们。

在目标代码生成的过程中,还需要进行代码优化,以提高程序的执行效率和速度。

二、编译原理在编程中具有广泛的应用。

它不仅可以提高代码的效率和速度,还可以减小程序的体积,降低资源的消耗和开发成本。

下面从几个方面来讲述其具体应用。

1. 语言设计编译原理可以用于设计新的编程语言。

通过分析常用的编程语言的特点和缺陷,可以设计出更加高效、简洁、易用的编程语言,以便将来的程序员可以更加方便地开发和维护代码。

同时,基于编译原理的词法分析、语法分析和语义分析技术,可以使设计出的编程语言变得更加具有可读性、可维护性和可扩展性。

2. 编译器和解释器开发编译原理可以用于编译器和解释器的开发。

编译器是将高级语言翻译成为低级机器语言的程序,而解释器则是将高级语言翻译成为中间代码或解释执行。

编译器和解释器是程序设计中的基础组成部分,它们对程序的执行效率、速度和可移植性都有着重要的影响。

通过使用编译原理技术,可以设计出高效、稳定、易维护的编译器和解释器,以便更加方便地开发和维护代码。

acm实践报告

acm实践报告

acm实践报告一、引言ACM(Association for Computing Machinery)是国际计算机科学领域最具影响力的学术组织之一,旨在促进计算机科学的发展和交流。

本报告旨在总结我参加ACM实践活动的经历和所获得的收获。

二、活动背景ACM实践活动是一项针对计算机科学专业学生的实践性培训活动,通过解决实际问题和参与团队竞赛,提升学生的编程能力和团队合作精神。

我所参与的ACM实践活动是一项与算法设计和编程相关的挑战赛。

三、挑战赛内容挑战赛主要涉及以解决一系列算法问题为目标的编程竞赛。

每个参赛队伍由三名队员组成,团队成员之间需要密切合作,共同克服问题,并在规定时间内提交解决方案。

挑战赛的题目不仅考察算法设计与分析能力,还对程序的时间和空间复杂度有一定的要求。

四、挑战过程在挑战过程中,我组与其他参赛队伍共同面对了许多复杂的问题。

我们首先通过研究每个问题的要求和限制条件,进行算法选择和设计。

随后,我们进行了深入的讨论和头脑风暴,共同找到解决方案。

在编码阶段,我们合理分工,互相协作,并且进行了严格的代码审查,以确保程序的正确性和效率。

最后,我们不断进行测试,修正程序中的错误,并提交我们的最终解决方案。

五、收获与成果参加ACM实践活动,我个人获得了许多宝贵的经验和技能。

首先,我加深了对算法的理解与应用能力,学习到了许多常用的算法和数据结构。

其次,我提高了编程的能力,锻炼了程序的调试和优化技巧。

此外,通过团队的合作与协作,我学会了有效沟通和项目管理的重要性。

最重要的是,这次实践活动培养了我面对挑战时的坚持和解决问题的毅力。

六、总结与展望通过参加ACM实践活动,我深刻体会到了理论与实践相结合的重要性。

实践活动不仅是对所学知识的应用,更是培养学生创新思维和解决实际问题能力的有效途径。

希望今后能继续积极参与ACM实践活动,不断提升自己的技能和能力。

七、致谢在此,我要向组织者和指导老师表达最诚挚的感谢。

ACM竞赛平台在C语言程序设计教学中的应用研究

ACM竞赛平台在C语言程序设计教学中的应用研究
◆ ◆ ◆ ◆ ◆
A C M竞赛平台在 C 语言程序设计教学中的应用研究
◆李 晔 卢 冰 王 捷 金保 华
( 郑州轻工业学院计算机与通信工程学院 )
【 摘要】c语 言程序设计作为计算机专业相关专业学生的入 门第一课 , 是 学习其它专业课程的重要基础 。如何教好这入 门第一课是教 学
改革 中的重要课题 。本文针对 c语 言教 学中普遍存在的重理论轻 实践、 重语法讲解轻编程思想的现象, 将A C M 竞赛 平台用于 c语 言的 实践教学 中, 为学生提供 了编程 实践的平台, 极 大地激发 了学生的编程热情 , 培养 了学生 自主学习的能力, 取得 了很好的教学效果。 I 关键词】 c语 言程序设计 A C M 竞赛平 台 教学效果
A C M竞赛平台正好提供 了这样一个程序在 线测试平台。 为了能 够在下次 实验或竞赛中取 得良好 的成绩 , 他 们会充分 的利用课余 时间 , 在 竞赛 平 台
下大量的做题 , 虽然 有 些 知 识 的学 习 很 枯 燥 。 但 是 由于 在 攻 克 题 目中 行 之
1 . C语言程序设计是计算机相关专业的入 门第一课
的学 习至 关 重 要 。 2 . C语 言 是 一 门实 践 性 很 强 的课 程 尖 。教 学 生 写 程 序 , 好 比教 小 学 生 写 作 文 , 只 讲 语 法 是 教 不 会 写 作 的 。 而 A C M 竞 赛平 台 的 引入 , 把 以 语法 为 中心 的 教学 模 式 引 导 到 案例 驱 动 的 教 学 不 再 以语 法 为 中 心 , 而 是 以 培 养 编 程 能 力 为 中 C语言程序设计 的重点是“ 程序设计 ” , C语言 的教 学不能只停 留在对 模 式 中来 。 C语 言 的 学 习 , 语法 的研究上 , 而 是教学生用 C语言的语 法表达 自己的算法思想。 目前很 心 。 C语 言 的教 学 重 点 得 到 了拨 乱 反 正 , 教 学 效 果 得 到 了显 著 提 高 。 多 C语 言 教 材 过于 详 尽 的语 法 解 释 是 对 老 师 和 学 生 的 一 大 误 导 。 老 师 在

基于ACM自动判题系统的程序设计实践教学改革探索

基于ACM自动判题系统的程序设计实践教学改革探索

C语言程序设计、J v aa语言程序设计等课程 ,作为很多高校 计 算 机大 类专 业 的基 础课 和 必修 课 ,主要 在 于培 养 学生 掌握 程序 设计 和 调 试 的基 本 方法 ,形 成程 序 设 计 基本 思 想 ,使 用 C Jv /aa 语 言 进行 基本 程序 设 计 的职业 能 力 ,在整 个专 业 培养 目标 中起 到 了重 要 的基础 支撑 作 用 。本文 针对 程 序设 计传 统 教学 模式 存 在 的 不 足提 出 了基 于 自动 判题 系统 的实 验探 索 ,取 得 了较好 的 效果 。 程序 设计 传 统实 验教 学模 式 存在 的不 足 在 以往 的教学 过 程 中,往 往采 用 的教 学 方式 中 ,程序 设 计类 实验教学一般采用教师布置实验任务、学生编写程序并上机调试 ( 教师 辅 导 ) 学 生完 成 实验 报告 、 师批 改报 告并给 出成绩 的过 、 教 程 展 开 。在这 种模 式 下 ,对于 学 生提 高程 序 设计 能力 存在 着诸 多 不 足 ,主 要表 现在 : ( )程序设计类实验以模仿为主,不利于学生创新思维和 一 创新能力的培养。实验课程通常配有实验指导书,学生可 以根据 指导书依样画葫芦完成实验。由于学生缺少 自主设计实验框架这 个 环 节 ,抑制 了主 观 能动 性 的发挥 ,对培 养 学生 的创 新思 维 能力 尤 为 不利 。 ( )学 生练 习 的代 码量 不足 , 限制 程序 设计 能 力 的提高 。 二 实 验课 程通 常 是要 求在 规 定数 目的实验 中完成 给定 的题 目,实 验 数 目和题 目数 目均 受 到 限制 ,一般 课 程结 束 ,好 的学 生完 成 的题 目量也就是几十题而已。这样的代码量对于培养较好的程序设计 能 力所 需 的代 码量 来 说 ,明显 是严 重不 足 。 ( )教 师之 间沟 通 不足 ,缺 乏 丰富 且优 质 的共 享资 源 。 由 三 于 没 有统 一 的教 学平 台 ,任课 教师 的资源 相对 分散 ,教师 在组 织 课 堂 教学 时各 自为 政 ,学 生缺 乏丰 富 的实 践资 料 ,很 难熟 练掌 握

编译原理的实际应用

编译原理的实际应用

编译原理的实际应用什么是编译原理?编译原理是计算机科学中的一门重要课程,它研究的是如何将高级语言(比如C、C++、Java等)编译成机器码,以便计算机能够执行这些代码。

在编译原理中,我们学习了编译器的构建原理、语法分析、词法分析等内容。

编译原理的实际应用非常广泛,几乎涵盖了计算机科学的各个领域。

编译原理在软件开发中的实际应用1.编译器的构建:在软件开发过程中,我们经常需要自定义特定语言的编译器。

通过学习编译原理,我们可以了解如何构建一个编译器,并将其应用于软件开发中。

编译器的构建包括前端工作(词法分析、语法分析、语义分析)和后端工作(代码生成、优化等)。

掌握编译原理可以提高我们构建编译器的能力,使我们能够更好地适应各种编程语言的开发需求。

2.解释器的设计:除了编译器,解释器也是编译原理的重要应用之一。

解释器与编译器不同,它将源代码逐行解释成机器码并执行,而不是将其编译成可执行文件。

解释器常用于解释脚本语言,比如Python、Perl等。

通过学习编译原理,我们可以更好地理解解释器的工作原理,设计和实现高效的解释器。

3.语言翻译:编译原理还可以应用于语言翻译。

很多时候,我们需要将一个编程语言的代码翻译成另一种编程语言的代码。

例如,我们可能需要将C语言代码翻译成CUDA代码,以便在GPU上执行。

编译原理提供了一套通用的方法和技术,可以帮助我们进行语言之间的翻译工作。

4.代码优化:编译原理还涉及到代码的优化。

通过对代码进行分析和优化,可以提高代码的执行效率,减少资源的消耗。

编译原理提供了一些常用的代码优化技术,比如常量折叠、循环展开、死代码删除等。

掌握这些技术可以帮助我们设计高效的代码,并提高软件的性能。

编译原理在数据库中的实际应用1.查询优化:在数据库系统中,查询优化是一个非常重要的问题。

当我们向数据库发送一个查询请求时,数据库系统需要优化查询计划,以提高查询的执行效率。

编译原理中的优化技术可以帮助我们对查询计划进行优化,从而提高数据库的性能。

编译原理课程的应用

编译原理课程的应用

编译原理课程的应用1. 什么是编译原理课程编译原理是计算机科学与技术专业中的一门基础课程,主要研究编译器的设计与实现原理。

编译器是将高级语言源代码转化为底层机器语言的工具,它起到了连接程序员与计算机硬件之间的桥梁作用。

2. 编译原理课程对计算机科学专业的重要性编译原理课程在计算机科学专业中具有重要的地位,它为学生打下了编译器设计与实现的基础,并培养了学生的系统设计与优化能力。

通过学习编译原理,学生能够更好地理解计算机底层工作原理,并能够应用所学知识解决实际问题。

3. 编译原理课程的应用领域3.1 编程语言设计与实现编译原理课程对于编程语言的设计与实现具有直接的应用价值。

学生通过学习编译原理,能够了解不同编程语言的语法结构和语义特点,并能够使用编译原理的知识设计和实现自己的编程语言。

3.2 编译器设计与优化编译原理课程在编译器设计与优化方面也有广泛的应用。

学生学习了编译原理后,能够理解编译过程中的词法分析、语法分析、语义分析、代码生成和优化等关键步骤,从而能够设计出高效、可靠的编译器和优化算法。

3.3 虚拟机技术编译原理课程还对虚拟机技术的应用具有重要的影响。

学生通过学习编译原理,能够了解虚拟机的工作原理、指令集设计和解释执行等相关知识,从而能够设计和实现高效的虚拟机系统。

3.4 自动化测试和代码分析编译原理课程对于自动化测试和代码分析也有重要的应用。

学生通过学习编译原理,能够掌握编译器的测试方法和工具,能够设计和实现代码分析工具,从而能够对代码进行静态分析,提高代码质量和安全性。

4. 编译原理课程的学习方法和建议4.1 学习理论知识学习编译原理时,要注重理解和掌握编译原理的核心概念和理论知识,包括词法分析、语法分析、语义分析、代码生成和优化等内容。

可以通过阅读教材、参考资料和相关论文来深入学习。

4.2 实践编程练习学习编译原理不能只停留在理论层面,还要进行实践编程练习。

可以选择一门编程语言,设计和实现一个简单的编译器或解释器,以加深对编译原理的理解和掌握。

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

ACM在线评测在编译原理实践教学中的应用探讨1引言
多年来,ACM在线评测一直被成功应用于ACM国际大学生程序设计竞赛(ACM/ICPC:ACM International Collegiate Programming Contest),这是美国计算机协会(ACM:Association for Computer Machinery)组织的、世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,旨在使大学生运用计算机程序设计理论充分展示自己分析问题和解决问题的能力。

中国大陆地区1997年开始举办区域赛和参加世界总决赛。

十几年来,全国近百所知名高校积极响应,热心参与,已成为我国高校科技活动的一个热点和展示计算机教育成果及优秀人才综合素质的一项重要活动,目前更是出现迅速普及的趋势。

鉴于ACM在线评测提供了完整的计算机实践教学模式,在培养学生创新能力、综合能力、锻炼学生心理素质和团队合作精神方面起到了积极的促进作用,目前我国的许多高校,如北京大学、清华大学、浙江大学和中山大学等均开发了自己的ACM在线评测系统,并将其引入到了计算机算法设计类课程的实践教学和学生能力评测中,如程序设计基础、数据结构与算法、人工智能、算法分析与设计等,并取得了非常好的效果,在很大程度上弥补了计算机实践教学中的不足。

我校在2008年初开发了编译程序在线评测系统,开始探讨将这一模式引入“编译原理”课程的实践教学中,取得了很好的效果,现正在进一步完善。

2在线评测系统的功能
“编译原理”是一门理论和实践紧密结合的课程,但其内容抽象、逻
辑性强、不易理解,是计算机专业课中公认的难学课程。

学习理论知识难,编程训练更是让学生望而生畏。

如何使学生掌握编译技术、循序渐进地参与复杂软件系统的设计开发,是需要深入研究的问题。

2.1ACM在线评测系统的主要功能
ACM在线评测系统是一个基于B/S结构的在线程序与算法设计练习、竞赛平台,主要功能可分为用户管理、题库管理、在线提交、在线比赛及在线排名、在线讨论等。

该系统提供了大量供学生练习和竞赛的竞赛题目,学生在线提交解决相关练习和竞赛题的程序代码,系统可以自动编译程序代码,生成可执行文件,并根据已存储的测试用例,从程序的正确性、程序运行总时间、耗费内存、单用例执行时间、程序返回结果等各方面评测程序代码,并精确返回各方面的评测结果。

这不仅要求学生能够分析问题,综合利用知识点,而且还要在算法上进行合理的优化,并在更短的时间内给出准确解答,大大提高了教学质量和教学效果。

2.2需解决的问题
不同于算法设计类课程,编译程序复杂、规模庞大,程序模块之间关系紧密,编译结果可能不具唯一性等,都造成编译程序在线评测的困难。

除了评测外,课程各个知识点和算法关联程度高,后续内容往往需要前面的内容作支撑,一环紧扣一环,学生只想练习后面部分知识点和算法几乎不可能,他们对编写复杂程序很恐惧,造成很大心理负担。

“编译原理”的实践教学主要由两部分组成,课程实验和课程设计。

课程实验是实践教学的重要环节,也是课堂理论教学的重要补充,通过实验,学生能够更好地理解课程中的基本概念和原理,通过自己动手体
验提高实践能力。

通常这一类的实验多为验证性的,规模相对较小,主要是对一、二个知识点和算法的实践训练,如词法分析中的正则表达式到NFA
的转换、NFA到DFA的转换、DFA的最小化等程序的实现等。

因此,如何更合理地将“编译原理”中的各知识点和算法进行划分和归类,使其更适合于练习和在线评测,是要解决的一个问题。

课程设计与课程实验不同,主要是培养学生的综合设计能力,无论是
从综合性、设计性要求,还是从规模上要求,课程设计的复杂度都高于课程实验。

因此,如何更合理地组合“编译原理”中的各知识点和算法,形成完整的编译程序前端、后端乃致整个编译程序,以满足课程设计的要求,并适合于在线评测,是要解决的另一个问题。

3实践教学内容设计
一般地,编译程序主要由词法分析、语法分析、语义分析和目标代码生成程序等几个部分组成,每一部分又包含若干个知识点和算法。

因此,首先要将这些知识点和算法合理地拆分成若干个模块,使之简单化、小型化、独立化,使学生可以以任意顺序实现各模块的功能。

以编译程序前端的词法分析和语法分析两部分为例,共拆分设置了18个核心模块,并进一步扩展为21个模块,如图1所示,其中灰色显示的3个模块为外部输入模块,图中的箭头表示各模块之间的依赖关系。

由于语法分析部分的各模块均依赖于产生式表和符号表,为使关系图更清晰,在图
中隐去了这两个模块的依赖。

由于模块之间具有独立性,用户可以单独实现其中的某一模块而无须实现其所依赖的各模块,其依赖的模块将由评测系统提供接口予以使用。

这样,完整的词法分析程序需要实现4个模块,而语法分析具体分为5
种:①对于LL(1)分析法,需要实现LL产生式表、符号表、First集、Follow 集、LL(1)分析表、分析树共6个模块;②对于LR(0)分析法,需要实现LR 分析表、符号表、LR(0)自动机、LR(0)分析表、分析树共5个模块;③对于SLR分析法,需要实现LR分析表、符号表、First集、Follow集、LR(0)自动机、SLR分析表、分析树共7个模块;④对于LR(1)分析法,需要实现LR分析表、符号表、First集、Follow集、LR(1)自动机、LR(1)分析表、分析树共7个模块;⑤对于LALR分析法,需要实现LR分析表、符号表、First 集、Follow集、LR(1)自动机或LR(0)自动机、LALR自动机、LALR分析表、分析树共8个模块。

以上5种只需要实现其中一种,即可实现语法分析程序。

对于语义分析和目标代码生成程序的模块拆分及依赖关系,也采用类似的方法进行。

4编译程序在线评测系统的实现
为了与现有的ACM在线评测系统接轨,编译程序在线评测系统是通过在北京化工大学ACM在线评测系统上进行改进和增加功能来实现的,主要包括如下几个部分。

4.1组合模块功能实现
要实现编译程序,除了要实现上述拆分后的各相关模块功能外,还要
进行组合。

例如对于词法分析程序,除要分别实现“正则表达式转NFA”、“NFA转DFA”、“DFA转最小化DFA”和“最小化DFA转符号序列”四个算法,在评测系统中体现为实现NFA模块(输入为正则表达式,输出为NFA)、DFA模块、最小化DFA模块和符号序列模块外,还要将其组合,形成最终的
词法分析程序,这就提出了组合模块的思想。

一般来说,简单的组合模块思路是针对每一种可能的组合方式设计一个组合模块,但由于编译原理知识点和算法拆分后模块数量较多,其组合
方式更是呈指数级增长,这无疑增加了实现的难度,同时也会产生冗余。

因此,评测系统采用了一种自动组合的思路,在遵循编译原理的情况下,可进行任意模块的组合,用户在需要组合时可以自行选择需要组合的模块,系
统针对用户的选择自动生成组合模块。

评测系统对组合过程进行了如下约束:①组合模块的最后只能是一个输出。

如“LR(0)自动机”、“SLR分析表”、“LR(0)分析表”这三个模块就不能组合,因为组合之后就存在SLR 分析表、LR(0)分析表两个输出。

②组合模块不能有跳跃性。

如“LALR分析表”和“First集”这两个模块就不能组合,当然,这样的组合也没有实际意义。

③组合模块中不能出现依赖冲突的模块。

如“符号表”和“Follow集”模块不能组合,因为Follow集的依赖项First集需要符号表,但是符号表是用户实现的。

这种组合形成了依赖冲突。

图2所示为组合模块页面,这里显示了一种组合的情况,当选择了“LR(0)自动机”、“SLR分析表”、“分析树”三个模块时,系统会将其组合成一个新的模块,输入为LR(0)自动机需要的数据,输出为分析树。

4.2评测方法的改进
一般的ACM在线评测系统只能评测输出结果唯一的程序,对不唯一的情况要使用额外手段进行正确性评价,如编写一段辅助测试程序进行评测。

然而,“编译原理”中绝大部分模块产生的结果都是不确定或不唯一的,因此,简单地套用现有评测技术是无法实现编译程序的在线评测的。

在这里提出改进的评测方法,也是“编译原理”在线评测系统采用的评测方法。

针对模块输出结果不唯一的问题,例如正则表达式转NFA,系统设计了两种有效的方法:一种是采用模块替换方法,将用户编写好的模块放入评测系统提供的整个框架中去编译执行,评价整个框架执行的最终结果;另一种方法是评测时从用户提交的模块开始执行,结合系统提供的后续模块继续执行至能够产生唯一结果的模块为止,这时的结果也就可以利用现有的评测技术进行评测。

如NFA的等价性判断较为困难,当用户提交了NFA模块后,系统会使用其提供的已实现的框架,将其转化为DFA乃至最小化DFA,再进行评测。

当然这种方式对用户而言是透明的,用户体会到的是对其实现的模块进行了单元测试。

5结束语
实践表明,“编译原理”的实践教学中引入ACM在线评测为实践教学提供了新的方法和手段,是一个有益的探索。

在线评测系统是一个很好的实践教学平台,通过这个平台,学生能够更好地将理论与实践紧密结合,动手能力、创造能力和协调能力会得到进一步提高。

希望以上资料对你有所帮助,附励志名言3条:
1、要接受自己行动所带来的责任而非自己成就所带来的荣耀。

2、每个人都必须发展两种重要的能力适应改变与动荡的能力以及为长期目标延缓享乐的能力。

3、将一付好牌打好没有什么了不起能将一付坏牌打好的人才值得钦佩。

相关文档
最新文档