词法分析—编译原理结课论文.doc
《词法分析—编译原理结课论文.doc》由会员分享,可在线阅读,更多相关《词法分析—编译原理结课论文.doc(15页珍藏版)》请在三一办公上搜索。
1、编译原理结课论文题目: 词法分析 作者: 电话: Email: 教师: 递交日期: 2013 年 11 月 28 日摘要 词法分析作为编译的基础,其主要任务是对构成源程序的字符流进行扫描,然后根据构词规则识别单词符号,而这恰是源代码逆向分析过程中必不可少的一步。随着软件逆向工程的不断发展,词法分析被广泛应用于源代码逆向分析。本文就词法分析在源代码逆向分析过程中的应用进行探讨,尝试用简明易懂的方式去获得逆向分析后续工作所需的单词符号的各类信息。 关键词词法分析;逆向分析;源代码;单词符号 前言编译原理是一个十分复杂的加工处理程序。它将便于人们阅读但不能直接在计算机上执行的源程序翻译成语义上等价并
2、且可在计算机上执行的目标程序。为了处理各种使用于不同目的的源程序,一般将整个编译过程划分为五个处理阶段,分别是词法分析、语法分析、中间代码生成(语义分析)、代码优化和目标代码生成。在编译程序结构中,词法分析程序通常作为子例程被语法分析调用,每一次调用返回一个单词。一个源程序有许多单词组成,词法分析程序被调用较频繁,它的频率直接决定编译程序的效率。词法分析对源程序进行自左至右的扫描,将它从外部形式(字符串)变换成便于后几个阶段处理的内部形式,即分解出一个个有独立语法意义的单元,称之为单词(又称符号或者特征),同时识别出与其相关的属性。优化阶段对语义分析所产生的中间代码进行改造,以获得等价但更为高
3、效(指时间和空间的节省)的中间代码。目标代码生成阶段根据中间代码和表格信息,进行存储分配,选择代码,形成可在计算机上执行的目标程序。如果目标代码生成阶段产生的代码为汇编语言程序,那么嗨应再经过汇编阶段才能产生机器代码程序。 基于上述,本文通过设计、编制、调试一个具体的词法分析程序,对词法分析器的具体实现。正文1、词法分析 词法分析程序又称扫描器,它是编译过程的第一个阶段。其主要任务是从左到右依次描描字符串形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为内部编码形式的单词符号串输出,用于进行语法分析。通常可采用二元式(CLASS,VALUE)来表示一个单词符号 的内 部 编 码,其
4、中 CLASS为一整 数 码,用于表示该单词 的 类别;VALUE则是单词之值(如变量名在符号表中的序号,常数的二进制表示,以及运算符和分隔符的编码,等等)。 概括的说,扫描器在其工作过程中,一般应完成下列的任务: (1)识别出源程序中的各个单词符号,并将其转换成内部编码形式; (2)删除无用的空白字符、回车字符以及其他非实质性字符; (3)删除注释; (4)进行词法检查,报告所发现的错误。 此外,视编译工作流程的组织,一些编译程序在进行词法分析时,还要完成将所识别出的标志符登录到符号表的工作。从功能上看,词法分析上把字符串形式的源程序转换为单词串形式,然后进行语法分析。从工作方式上看,他与语
5、法分析之间存在两种接口方式。一种方式是将词法分析的输出结果存放在一个中间文件上,后面的语法分析程序将它作为输入进行语法分析。另一种方式是将词法分析编成一个子程序,该子程序由语法分析程序调用,当语法分析程序需要读出一个具有独立意义的单词。本设计采用前一种方式。1.1根据状态转换图直接编程编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。源程序词法分析程序记号文件具体任务有:(1)组织源程序的输入(2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件(3)删除注释、空格和无用符号
6、(4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输出到屏幕上。(5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回0并且填写符号表或常量表。标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。常量表结构:常量名,常量值义1.2词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自
7、身字符串;sum为整型常数。例如:对源程序beginx:=9:ifx9thenx:=2*x+1/3;end#的源文件,经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)2、词法分析程序的算法思想:算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。2.1 主程序示意图:主程序示意图如图3-1所示。其中初始包括以下两个
8、方面: 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”,;置初值调用扫描子程序输出单词二元组输入串结束 否 是结束 3. 词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称为单词符号或简称符号),如基本字(begin、end、for、if、while等),标识符、常数、算
9、符、和界符(标点符号、左右括号等等)。例如,对于pascal的循环语句 For I:=1 to 100 do 词法分析的结果是识别出如下的单词符号: 基本字 for 标识符 I 赋值号 := 整常数 1 基本字 to 整常数 100 基本字do 3.1 输出:词法分析器所输出单词符号常常表示成如下的二元式:(单词种别,单词符号的属性值) 单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词
10、符号的特性或特征。 例子:C+代码段:while(i=j) i- 经词法分析器处理后,它将被转为如下的单词符号序列: =, _ 3.3 词法分析分析器作为一个独立子程序词法分析是编译过程中的一个阶段,在语法分析前进行。词法分析作为一遍,可以简化设 计,改进 编译 效率,增加编译系统的可移植性。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。 四、实验说明 (1)关键字:begin,end,if,then,else,while,write,read, do, call,const,char,until,procedure,repeat (2)运算符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 编译 原理 论文
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2396970.html