论文部分内容阅读
摘要:编译技术在计算机软件工程开发中的有不可代替的地位,它不光是一种语言生命的开始,还伴随着该语言功能的逐渐壮大。基于语言的软件设计想要更加完美,离不开编译技术。本文从编译技术的背景及软件工程开发的现状开始介绍,讲解了程序设计语言的基本编译过程,列举了基于编译技术的程序可视化,及编译技术在排版上的应用。
关键词: 编译技术;软件工程开发;编译过程;程序可视化;排版;未来编译
1 前言
近些年来,计算机软件行业在我国飞速发展,日益壮大。各种高级语言(如C,C++,Java,PHP,Python语言等)的队伍在软件业中迅速扩大,但多数软件工程开发程序员把大量的时间用在编程上面,进而忽略了一些计算机基础知识对软件工程的重要影响。本文对编译技术及其某些应用进行一个概括,以体现编译技术在软件工程开发中占据极其重要的地位,希望更多的软件爱好者和软件相关从业者能够重视编译技术,对未来的编译技术做出坚实有力的伟大贡献。
2 编译技术及软件开发
2.1编译技术的背景
很早之前人们构造的几乎所有的编译程序都是用机器语言或者是汇编语言来实现,但低级语言编写的程序有着复杂难懂,易出错,不易移植,可维护性和可扩充性差,编写效率低等问题。为解决此问题,和充分发挥硬件系统的效率,高级语言编译程序应运而生,不过它的核心仍离不开机器语言或者是汇编语言。编译技术,简单地说就是将高级语言代码翻译成逻辑上等价的计算机可以运行的二进制机器语言代码的技术。
2.2软件工程开发的现状
我国软件工程的发展迅速,市场对软件工程的人才的需求量随着计算机的普及不断地增加,但是我国常用的主流软件开发的工具都是由国外研发的,相比我国的软件技术比较落后。这就对我国软件工程开发技术人员有了更高的要求。
2.3编译程序的开发过程
编译程序的工作过程一般分为五个阶段,词法分析、语法分析、语义分析与中间代码的产生、优化、目标代码生成。
1.词法分析:输入源程序,通过有限自动机的状态转换矩阵,对构成语言源程序的字符串进行识别和分解,得到一个个单词字符。
2.语法分析:需要和词法分析搭配进行,根据语言的语法描述规则,通过自上而下或自下而上的分析方法,识别出各类语法单位。
3.语义分析及中间代码的产生:对语法分析识别出的各类语法范畴,进行静态语义检查和翻译,生成中间代码。
4.优化:遵循等价、有效、合算三原则对中间代码进行变换,优化可以在编译过程的各个阶段,最重要的一次是在产生目标代码之前。
5.目标代码的生成:依赖于操作系统和目标语言把经过优化的中间代码变换成特定机器上的低级语言代码。
3 编译技术在某些方面上的运用
3.1词法分析器和语法分析器的开发工具
基于编译技术的应用自然离不开词法分析器和语法分析器,在此就介绍一下词法分析器的生成工具LEX和语法分析器的生成工具YACC。一个LEX程序由一组正规式以及与每个正规式相应的一个“动作”组成。“动作”就是一段小程序,它代表当LEX程序按该正规式识别出一个单词符号时应该执行的命令。LEX程序就是用来识别和生成单词符号的。YACC通过输入用户提供的语言语法描述,基于LALR语法分析的原理,产生一个能够分析该语言语法的语法分析器。在结构化输入程序中,编译程序首先要识别出每个单词符号还要知道每一个语句的含义,但在调用过程中并不是LEX将所有单词符号都识别并传给YACC,而是当YACC的语法结构需要下一个单词符号时,就会调用LEX,因此需要反复调用这两个工具。
3.2程序可视化
程序的可视化即随时都可以看到结果程序与结果同步,这里的可视指的是无需编程,只需要通过直观的操作可以完成的界面设计。实现一个可视化工具,根据可视化特征,利用LEX生成C语言词法分析器和YACC生成C语言插装语法分析器。为了使词法分析器分离出的是一些有意义的标记串,需要两个缓冲容纳标记串,一个缓冲ECHOTOKEN用于容纳原始标记,另一个缓冲QUOTETOKEN用于容纳那些在某些情况下需要标记前面加转义字符而转换了的标记。除此之外,还要采用文件指针记住标记读取以前的位置,当插装语法分析器读到标记串之后,在文件指针记住的位置插装代码。
3.3排版
简单排版,实现一个只能按某一种特定的“排版规则”进行排版的工具,可以利用已有的LEX和YACC工具的编译技术。利用词法分析器把输入的该语言源程序分解成单词序列,语法分析与词法分析部分思想一样,语义分析对源程序进行类型检查、填表、计算,再按一定的“排版规则”对输入单词符号进行排版输出。
3.4其他方面的应用
由上述的应用可以看出只要能够用文法来描述一门语言的词法规则和语法规则,就可以通过编译技术来设计这门语言应用到不同的领域中。编译技術除了用于程序可视化和简单排版上,还可用于设计信息检索系统,文本编辑器,模式识别器等。
4 结束语
以往的编译器,程序员花费了很多时间在程序的界面设计上,而实现程序的核心算法时间不足,导致设计出来的软件功能上不够好,整个程序的设计效率也不高。设想未来编译技术能够使程序员通过一些简单操作来构思、布局、设计软件的功能等,不需要花大量的时间在如何用代码实现,和维护等方面。如此,未来对软件开发从业者注重的不再是编程能力,而是创新、设计、构造等方面的能力。这会使更多敢想敢做的人涌进软件工程开发的激流中,推进软件行业的发展。
参考文献:
[1]陈火旺等.程序设计语言编译原理(第三版)[M].北京市:国防工业出版社.1980.
[2]张墉.浅析软件工程开发的现状及发展[J].商情.2017(07).
[3]但静培等.基于编译技术的程序可视化[J].计算机应用研究.2002(10).
[4]蔡苗苗.编译技术在排版的应用[J].现代计算机.2003(175):93-96.
作者简介:孙杰凡(1997—)女,汉族,河南郑州人,河南大学软件学院,2015级本科生,软件工程专业。
关键词: 编译技术;软件工程开发;编译过程;程序可视化;排版;未来编译
1 前言
近些年来,计算机软件行业在我国飞速发展,日益壮大。各种高级语言(如C,C++,Java,PHP,Python语言等)的队伍在软件业中迅速扩大,但多数软件工程开发程序员把大量的时间用在编程上面,进而忽略了一些计算机基础知识对软件工程的重要影响。本文对编译技术及其某些应用进行一个概括,以体现编译技术在软件工程开发中占据极其重要的地位,希望更多的软件爱好者和软件相关从业者能够重视编译技术,对未来的编译技术做出坚实有力的伟大贡献。
2 编译技术及软件开发
2.1编译技术的背景
很早之前人们构造的几乎所有的编译程序都是用机器语言或者是汇编语言来实现,但低级语言编写的程序有着复杂难懂,易出错,不易移植,可维护性和可扩充性差,编写效率低等问题。为解决此问题,和充分发挥硬件系统的效率,高级语言编译程序应运而生,不过它的核心仍离不开机器语言或者是汇编语言。编译技术,简单地说就是将高级语言代码翻译成逻辑上等价的计算机可以运行的二进制机器语言代码的技术。
2.2软件工程开发的现状
我国软件工程的发展迅速,市场对软件工程的人才的需求量随着计算机的普及不断地增加,但是我国常用的主流软件开发的工具都是由国外研发的,相比我国的软件技术比较落后。这就对我国软件工程开发技术人员有了更高的要求。
2.3编译程序的开发过程
编译程序的工作过程一般分为五个阶段,词法分析、语法分析、语义分析与中间代码的产生、优化、目标代码生成。
1.词法分析:输入源程序,通过有限自动机的状态转换矩阵,对构成语言源程序的字符串进行识别和分解,得到一个个单词字符。
2.语法分析:需要和词法分析搭配进行,根据语言的语法描述规则,通过自上而下或自下而上的分析方法,识别出各类语法单位。
3.语义分析及中间代码的产生:对语法分析识别出的各类语法范畴,进行静态语义检查和翻译,生成中间代码。
4.优化:遵循等价、有效、合算三原则对中间代码进行变换,优化可以在编译过程的各个阶段,最重要的一次是在产生目标代码之前。
5.目标代码的生成:依赖于操作系统和目标语言把经过优化的中间代码变换成特定机器上的低级语言代码。
3 编译技术在某些方面上的运用
3.1词法分析器和语法分析器的开发工具
基于编译技术的应用自然离不开词法分析器和语法分析器,在此就介绍一下词法分析器的生成工具LEX和语法分析器的生成工具YACC。一个LEX程序由一组正规式以及与每个正规式相应的一个“动作”组成。“动作”就是一段小程序,它代表当LEX程序按该正规式识别出一个单词符号时应该执行的命令。LEX程序就是用来识别和生成单词符号的。YACC通过输入用户提供的语言语法描述,基于LALR语法分析的原理,产生一个能够分析该语言语法的语法分析器。在结构化输入程序中,编译程序首先要识别出每个单词符号还要知道每一个语句的含义,但在调用过程中并不是LEX将所有单词符号都识别并传给YACC,而是当YACC的语法结构需要下一个单词符号时,就会调用LEX,因此需要反复调用这两个工具。
3.2程序可视化
程序的可视化即随时都可以看到结果程序与结果同步,这里的可视指的是无需编程,只需要通过直观的操作可以完成的界面设计。实现一个可视化工具,根据可视化特征,利用LEX生成C语言词法分析器和YACC生成C语言插装语法分析器。为了使词法分析器分离出的是一些有意义的标记串,需要两个缓冲容纳标记串,一个缓冲ECHOTOKEN用于容纳原始标记,另一个缓冲QUOTETOKEN用于容纳那些在某些情况下需要标记前面加转义字符而转换了的标记。除此之外,还要采用文件指针记住标记读取以前的位置,当插装语法分析器读到标记串之后,在文件指针记住的位置插装代码。
3.3排版
简单排版,实现一个只能按某一种特定的“排版规则”进行排版的工具,可以利用已有的LEX和YACC工具的编译技术。利用词法分析器把输入的该语言源程序分解成单词序列,语法分析与词法分析部分思想一样,语义分析对源程序进行类型检查、填表、计算,再按一定的“排版规则”对输入单词符号进行排版输出。
3.4其他方面的应用
由上述的应用可以看出只要能够用文法来描述一门语言的词法规则和语法规则,就可以通过编译技术来设计这门语言应用到不同的领域中。编译技術除了用于程序可视化和简单排版上,还可用于设计信息检索系统,文本编辑器,模式识别器等。
4 结束语
以往的编译器,程序员花费了很多时间在程序的界面设计上,而实现程序的核心算法时间不足,导致设计出来的软件功能上不够好,整个程序的设计效率也不高。设想未来编译技术能够使程序员通过一些简单操作来构思、布局、设计软件的功能等,不需要花大量的时间在如何用代码实现,和维护等方面。如此,未来对软件开发从业者注重的不再是编程能力,而是创新、设计、构造等方面的能力。这会使更多敢想敢做的人涌进软件工程开发的激流中,推进软件行业的发展。
参考文献:
[1]陈火旺等.程序设计语言编译原理(第三版)[M].北京市:国防工业出版社.1980.
[2]张墉.浅析软件工程开发的现状及发展[J].商情.2017(07).
[3]但静培等.基于编译技术的程序可视化[J].计算机应用研究.2002(10).
[4]蔡苗苗.编译技术在排版的应用[J].现代计算机.2003(175):93-96.
作者简介:孙杰凡(1997—)女,汉族,河南郑州人,河南大学软件学院,2015级本科生,软件工程专业。