毕业设计网
JSP,JAVA | python | nodejs | android,安卓 | PHP | 微信小程序 |

基于C++的词法分析器的设计与实现

随着高级语言的不断发展, 编译过程成为影响计算机语言发展的一个主要因素,词法分析是编译过程中最基础的环节, 它将接收到的所有符号根据构词规则转换成一系列单词串词法分析是编译过程的第一阶段, 其任务是从左至右逐个字符对源程序进行扫描, 产生一个个的单词符号, 把作为字符串的源程序改造成为单词符号串的中间程序。在编译程序结构中, 词法分析程序通常作为子例程被语法分析程序调用, 每一次调用返回一个单词。词法分析程序的实现有两种不同的方法: 手工编写和机器自动生成。本文讨论手工实现, 并实现了一种改进的词法分析程序。计算机系统与人信息交换界面多数是应用高级语言来实现。一个高级语言程序的实现,必须依赖于相应的编译系统。所谓编译程序就是指能够把某一种语言程序转换成另一种与之等价的语言程序。它通常包括五个阶段:词法分析,语法分析,语义分析与中间代码的产生、优化,目标代码的生成。完成计算机翻译过程的关键阶段,它为后面的语法分析、语义分析做好准备,打好基础,以便快速地、高质量地生成目标语言程序。因此词法分析是编译的基础。

 

1.词法分析器的设计原则

在编译程序工作的五个阶段中,每个阶段都必须遵从功能等价的原则。词法规则与语法分析阶段依据的语法规则一同构成了一个语言的语法,而语法则是从"形"的角度衡量一个程序是否合法。所以在词法分析阶段,词法规则成为重要的研究对象。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的从头至尾扫描一遍,复杂度较低,易实现。

2.词法分析器的设计对象

在计算机翻译中,词法分析的关键之一在于如何识别单词的种类,特别是面对定义形式一样、结构完全相同的标识符和保留字,如何正确地解决对它们的识别处理,是词法分析中的一项重要任务。由于我们规定的c++语言程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。规定输出的单词符号格式为如下的二元式:(单词种别,单词自身的值)。通常一种程序语言中定义的单词种类包括标识符(identifier)、保留字(reservedw ord) 、常数(literal)、 运算符(op erator)、界符等。C++语言中定义了属于这五种类型的大量的单词,但是由于预编译器只识别我们自定义的注释,因此预编译器处理的单词集只是C++语言中定义的单词集的一个真子集。

3.词法分析器的任务

词法分析器的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序转换成为单词符号串的中间程序。词法分析程序的输出结果是组成语言的基本元素即单词,在实际处理的时候,输出并非单词,而是每个单词对应的二元式,形为<单词种别,单词符号的属性>,编码的方式由编译系统的研制者决定。故经过词法分析,在输出结果中并没有单词本身。

4.词法分析的依据

在编译程序工作的五个阶段中, 每个阶段都必须遵从功能等价的原则。词法分析阶段依据的是词法规则。词法规则与语法分析阶段依据的语法规则一同构成了一个语言的语法, 而语法则是从“形”的角度衡量一个程序是否合法。所以在词法分析阶段, 词法规则成为重要的研究对象。描述词法规则的有效工具主要有正规式与有限自动机。

5.总体设计

词法分析过程如附图所示。首先,根据分析的文件对象,新建名为“t1_ 单词表”的文件。然后, 判断RichTextBox 中的文本是否结束, 如果文本内容没有结束,将按C 语言中的构词规则从文本中取出若干个字符组合形成一个个单词( 例如字符串型常数是以双引号为区分标记),根据预先设计好的单词规则分析这些单词的类型, 并记载每个单词所必须的信息。最后,将单词依次保存在“t1_ 单词表”表中。 

以上是一部分介绍,如需要完整的资料或者如不符合您的要求,请联系技术人员qq:242219979咨询

上一篇:vc++动态创建控件技术在程序开发中的应用与设计
下一篇:asp二学位在线报名管理系统的设计与实现


版权所有 毕业设计网联系qq:242219979 © 2007-2022