编译原理中语法分析探讨及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)语法分析概述
语法分析是对高级语言的句子结构进行分析,在编译过程中处于核心地位,它的主要任务是在词法分析识别出正确单词符号串的基础上,根据语言定义的语法规则,从单词符号串中识别出各种语法成分,并进行语法检查和错误处理,生成相应的语法树。
生成语法树的方法有两种,一种是自上而下另一种是自下而上。
[1]
自上而下的语法分析方法是对由单词种别构成的源程序,尝试用所有可能的途径,从语法树的根结点出发,从上至下为输入符号串建立一棵语法树。
也可以说成是为输入符号串构造一个最左推导。
整个分析过程就是一种试探的过程,通过不断使用不同产生式谋求匹配输入符号串的过程。
自上而下的语法分析方法分为确定的和不确定的两种。
只有LL(1)文法才能进行确定的自上而下语法分析,在这种分析方法中面临两个问题,回溯和死循环。
通过对文法的产生式进行改造来解决这两个问题,在回溯中改造的方法是提取公共左因子,比如:A→αβ1|αβ2,改造后为A→αA’,A’→β1|β2。
死循环的改造方法是消除左递归,比如:A→Aα|β改造后为A→βA’,A’→αA’|ε。
而不确定的有递归下降分析和预测分析,前者适合手工实现,后者适合自动生成。
递归下降分析是用子程序来实现的,为每个非终结符创造一个子程序,每个子程序里面都有一个函数体,这个函数体是根据非终结符的产生式而定义展开的,当分析过程中遇到终结符时就直接匹配,如果遇到非终结符就调用相应的非终结符对应的子程序。
预测分析方法需要借助一个状态栈和一个二维分析表来实现,两者必须联合控制才能更好的实现预测分析方法。
自下而上的语法分析方法和自上而下的语法分析方法是完全不同的两种方法,但是它们产生的结果是相同的,都是构造一棵语法树,只是构造的过程不同罢了。
语法树创建的过程是把分析符号串的各个符号作为叶子结点,按照文法定义的规则,把产生式左部的非终结符作为父结点,自下而上构造此树的过程。
它的基本思想是“移进—归约”。
(二)语法分析方法的相关应用
语法分析技术在软件工程、计算机考评、信息安全检测、自然语言处理方面得到了有价值的应用,由于语法分析技术应用广泛,这里着重介绍语法分析在计算机考评方面的有错误的编程题自动评分方法。
具体情况如上表所示。
1、软件工程
语法和词法分析是代码自动插装技术中必不可少的一部分,语法的词法分析对代码自动插装技术的实现起着至关重要的作用,要想实现代码的自动插装,最主要的是要根据插装需求构造词法语法分析器,然后根据需要完成对源程序的扫描,输出插装代码后的源程序。
分析器对源程序的扫描过程包含词法分析和语法分析。
词法分析主要是把源程序中的若干字符划分为若干几号,语法分析主要是从若干几号中完成程序结构的分析,并且识别出函数体、语句、表达式、关键字、程序分支等。
[2]
2、计算机考评
随着科技的发展越来越多的网上考试已经成为一种趋势,伴随而来的就是自动评分系统,往往就是答题过后提交试卷,然后电脑就会自动进行评分然后显示所得成绩,当然这种评分方法有利也有弊,有利是因为这样的评分方式省了很多劳动力,同时节约了很多时间。
但是也有不利的一方面,因为对于考生来说这样的阅卷方式是很苛刻的,因为如果让老师修改一道大题她可能回分步骤给出分数,而不是只看结果,但是对于机器,它只认得结果,只要你的整体结果是错误的,那么你前面的步骤也只能是零分,所以对于考生来说这样的评分方式实在是太过苛刻。
但是现在我们有了新的方法来解决这样的问题,可以运用某种方法来识别出有错误的部分,比如现在实现的有对有语法错误的编程题自动评分,编程是一个过程,对一道题目进行编程,它的代码你不仅仅是短短的几句,有时甚至是几十句、几百句、几千句…….能出现错误是在所难免的,所以针对有错误的编程题可以用局部语法分析和采分点匹配方法来实现对其自动评分,它具体的实现方法步骤是先是把有语法错误的程序分解为基本的语句单元,与模板采分点语句一并经过局部语法分析,转化为语法分析树的中间表示形式,然后进行采分点分配,进而输出有语法错误的学生程序的评分结果,该方法主要用于了解答题者对基本语法知识的正确使用和对题目关键语义的正确表达,使得对有语法错误的学生程序的评分结果更加符合人工阅卷的思想。
[3]这样即为老师省了力气,也体现了公平公正,对学生也没有不利的地方了,并且通过电脑自动评分还更加体现了学生自身的能力,没有了那些所谓的人情分,这样对于每个答题者来说都是公平的、公正的、公开的,这是一种即有
编译原理中语法分析探讨及其应用
朱冲,陈雪飞,张聪品
(河南师范大学河南新乡453007)
【摘要】编译原理中的几个重要阶段是词法分析、语法分析、语义分析和中间代码生成以及代码优化和目标代码生成,本文主要研究语法分析阶段在编译原理中的重要性,着重研究语法分析技术的相关应用。
通过对相关具体应用的介绍与探讨,巩固我们对编译原理中语法分析理论知识的理解,并认识到编译原理在很多领域的重要性。
【关键词】编译原理;语法分析;相关应用
应用领域典型应用
软件工程代码自动插装技术、软件演化分析技术
计算机考评有语法错误的编程题自动评分方法、试题导入系统
信息安全检测程序代码抄袭检测系统、程序代码复制检测方法、
程序相似度判定方法
自然语言处理汉语韵律短语预测、文言文阅读、关键词提取、
领域词典的构建
148
··
福建电脑2015年第6期
效又省力的两全其美的方法,也是编译原理语法分析给我们带来的有利一面。
3、信息安全检测
21世纪是一个科技突飞猛进的社会,是一个信息化的社会,在高科技迅速发展的今天我们更要注重的是我们的信息安全,信息安全对于我们的生活来说很重要,因为当今的社会是一个数字化的社会,就像我们的银行卡密码一但泄露资金就会被盗窃,身份证号码被泄露那些罪犯可能就会拿着我们的身份证为非作歹,与此相似的问题还有很多总而言之就是信息安全对于我们来说是不可忽视也不容小觑的。
对于我们的学习中信息安全也是很重要的程序代码抄袭检测技术是一种非常有效的检测代码抄袭的技术,它能够根据代码的相似度很快的发现代码抄袭的嫌疑,这种代码抄袭检测技术主要是基于编译原理中的抽象语法树,它的主要实现过程是首先利用GCC编辑器分别为每一段源程序构造一棵抽象的语法树,而这棵语法树的各个节点中包含了被解析过的程序代码的语义,抽象语法树包含很多对编译有利的详细信息,因此,需要优化抽象语法树的结构,消除多余的节点,并且提取和程序有关的能够利用的节点;然后再对能够利用的结点进行解析,生成相应的文本,这个文本是蕴含丰富语义信息的结点的集合,最后利用决策函数对这些文本进行相似性计算,然后代码检测的工作就完成了。
[4]抄袭现象在我们生活中是很常见的,抄袭对于那个被抄袭者来说是不公平的,所以我们应该杜绝抄袭现象的严重泛滥,这样的程序代码复制检测技术给我们带来了很大的方便,同时也一定程度上抵抗了抄袭现象的严重泛滥。
在信息安全方面还有程序相似度判定方法,和上述的程序代码抄袭检测的性质大同小异都是防止信息抄袭的,在这里就不做过多的介绍。
4、自然语言处理
编译原理中的语法分析在自然语言处理方面运用的也是相当广泛的,比如汉语韵律短语预测、文言文阅读、关键词提取、领域词典的构建等。
在这里主要介绍一下关键词提取,
在高科技迅速发展的今天,我们每天都会面对很大的信息量,因此,我们需要对这海量的信息进行处理,这是当前计算机自然语言处理所面临
的重要的问题,因此用什么样的方法才能让计算机能够更好的进行自然语言处理是我们所要仔细考虑的事情,当然如果我们能从这些海量的信息中提取关键的一部分,那么我们就会大大的节省了阅读信息的时间,提高了办事的效率,基于语法分析的关键词提取就是帮我们解决了这样信息处理的问题。
[5]
关键词提取的具体实现流程如下:
结束语:
本文主要介绍了编译原理教学中的语法分析方法在各个领域的广泛应用,知识是无止境的,我们要好好利用所学的知识,把它运用到有用的地方,这样知识才会发挥它本身的价值,同时我们善于思考了,我们才是对知识的真正掌握,学习某方面的知识,不仅仅是知道了解,更重要的是要学会运用,把所学的知识能够准确有效的运用到生活中,能够解决生活中的一些问题,这样我们才真正的做到了学以致用。
参考文献:
[1]黄贤英,曹琼,王柯柯.<<编译原理及实践教程>>.清华大学出版社,2012-03
[2]宴华,袁海东,尹立孟.代码自动插装技术的研究与实现.电子科技大学学报,2002-02-28
[3]王倩,苏小红,马培军.有语法错误的编程自动评分方法研究—用局部语法分析和采分点匹配实现.计算机工程与应用,2010-06-11
[4]赵彦博.基于抽象语法树的程序代码抄袭检测技术研究.内蒙古师范大学,2010-03-30
[5]吴强.基于统计与分析的关键词提取.辽宁科技大学,2012
所有知识点,当然,也有一些专门针对考证的教材,但这些教材知识点不集中,不利于行动导向教学。
2.有“应试教育”的影子
有些老师为了提高考试通过率,上课时只对考试内容的重点讲解,而其他与考试无关的内容被忽略了,导致学生的实际应用能力缺乏,有些学生只是为了取得技能证书而做练习,违背了“教考分离”是为激发学生学习的积极性,掌握熟练操作技能的初衷。
3.毕业补考人数增加
实施“教考分离”后,由于我院计算机基础课程的成绩认定按照45分作为及格的分界线,等级考试成绩低于45分的学生,这门课程算不及格,45分及以上的学生这门课程算通过,60分及以上的学生可以获得计算机一级证书。
由于学生的基础不一,造成等级考试通过率也相差较大,有些学生参加两次等级考试还是不过,最后只有毕业补考了,这样每年这门课程都会有不少人补考,这样给学生也造成了较大压力,有些学生干脆
等着毕业补考,这样学生的积极性也受到打击,而这也违背了实施“教学分离”的初衷。
“教考分离”只是高职院校教学改革的一个尝试,如何提高高职学生的技能水平是高职院校教学改革永恒的课题,《计算机基础》课程作为一门公共基础课,该课程的教学效果如何直接影响全体学生的计算机操作水平,因此,加强计算机基础教学,培养高端技能型人才,提高学生的就业率,通过不断的创新和改革,才有利于高职院校的发展。
参考文献:
[1]雷文彬,甘娜.高职高专计算机应用基础以证代考模式研究[J].计算机世界,2012(2).
[2]姜漓.计算机等级考试对计算机基础教学影响的探讨[J].福建电脑,2009(2).
[3]范黎丽.关于高职计算机应用基础课程教学改革的思考[J].科技信息,2009(24).
(上接第157页)
149
··
福建电脑
2015年第6期
编译原理中语法分析探讨及其应用
作者:朱冲, 陈雪飞, 张聪品
作者单位:河南师范大学 河南 新乡 453007
刊名:
福建电脑
英文刊名:Fujian Computer
年,卷(期):2015(6)
1.黄贤英;曹琼;王柯柯<<编译原理及实践教程>> 2012
2.晏华,袁海东,尹立孟代码自动插装技术的研究与实现[期刊论文]-电子科技大学学报 2002(1)
3.王倩;苏小红;马培军有语法错误的编程自动评分方法研究-用局部语法分析和采分点匹配实现 2010
4.赵彦博基于抽象语法树的程序代码抄袭检测技术研究[学位论文] 2010
5.吴强基于统计与分析的关键词提取 2012
引用本文格式:朱冲.陈雪飞.张聪品编译原理中语法分析探讨及其应用[期刊论文]-福建电脑 2015(6)。