1、编译原理实验报告编 译 原 理实验报告专业班级:姓 名: 学 号:日 期:实验一 词法分析程序设计与实现一、实验目的加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。二、实验内容自定义一种程序设计语言,或者选择已有的一种高级语言,编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程语言和编程工具。从输入的源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、界符。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续
2、显示)三、实验步骤1. 定义目标语言的可用符号表和构词规则;2. 依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;3. 对正确的单词,按照它的种别以的形式保存在符号表中;4. 对不正确的单词,做出错误处理。四、实验结果 实验源代码: 运行效果:五、结果分析以及感受1、实验中需要识别的词1. 关键字:DIM、IF、DO、STOP、END单词种别码为1.2.3.4.5。2. 标识符;单词种别码为6。3. 常数为无符号整形数;单词种别码为7。4. 运算符包括:=、-、*、*单词种别码为8.9.10.11。5. 分隔符包括:,、(、); 单词种别码为12.13.14。2、设计思路这里以
3、开始定义的C+语言子集的源程序作为词法分析程序的输入数据。在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查、填适当的信息表。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。1. 定义部分:定义常量、变量、数据结构。2. 初始化:从文件将源程序全部输入到字符缓冲区中。3. 取单词前:去掉多余空白。4. 取单词:利用实验一的成果读出单词的每一个字符,组成单词,分5. 析类型。6. 显示结果。3、实
4、验感受通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C+语言)直接编写此法分析程序。另外,也让我重新熟悉了C+语言的相关内容,加深了对C+语言的用途的理解。实验二 递归下降分析法设计与实现一、实验目的根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验内容程序输入/输出示例(以下仅供参考): 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E-TG(2)G-+TG|TG(3
5、)G-(4)T-FS(5)S-*FS|/FS(6)S-(7)F-(E)(8)F-i输出的格式如下:(1)递归下降分析程序,编制人:姓名,学号,班级(2)输入一以#结束的符号串(包括+*/()i#):在此位置输入符号串例如:i+i*i# (3)输出结果:i+i*i#为合法符号串备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。注意:1. 表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#; 2. 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。三、实验要求:1. 对语法规则有明确的定义;2. 编写的分析程序能够对实验一的结果进行正确的语法分析;3. 对于
6、遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;四、实验结果1.程序源代码/其中的词法分析cffx()函数在实验一中已经给出2.实验结果五、实验分析以及感想1文法 (1)E- TG (2)G- +TG|-TG (3)G- (4)T- FA (5)A- *FA|/FA (6)A- (7)F- (E) (8)F-i2程序思路0. 定义部分:定义常量、变量、数据结构。1. 初始化:从文件将输入符号串输入到字符缓冲区中。2. 利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。3实验感受需要利用程序设计语言的知识和大量编程技巧,递归下
7、降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。实验三 预测分析法设计与实现一、实验目的加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验内容在实验1的基础上,用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。三、实验要求:1. 对语法规则有明确的定义;2. 编写的分析程序能够对实验一的结果进行正确的语法分析;3. 对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺
8、利完成语法分析过程;4. 实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。四、实验步骤1. 定义目标语言的语法规则;2. 求解预测分析方法需要的符号集和分析表;3. 依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;4. 对遇到的语法错误做出错误处理。五、实验结果1. 源代码/byyl.cpp/程序的主函数/ Stack.cpp: implementation of the Stack class./ 栈的类定义头文件/ Stack.h: interface for the Stack class.2. 运行效果分析成功的
9、效果分析失败的效果五、 实验分析以及感想1. LL(1)分析法的工作过程 开始往栈stack中放“”,然后把文件开始符号压栈。预测分析程序总是按stack栈顶符号X和当前输入符号a行事。 若X=a=”#”,则分析成功,停止分析 若X=a”#”,则把X从栈顶弹出,a指向下一个 输入符号 若XVn,则查分析表。若MX, a为某候选式,则弹出X,把该候选式反序压栈;若MX, a=,则弹出X,什么也不压;若MX, a=error,则报错。 2. 文法S-aAcBeA-bCC-bCC-B-d实验四 算符优先分析法设计与实现一、实验目的加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的
10、掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验内容在实验1的基础上,用算符优先分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。三、实验要求:1. 对语法规则有明确的定义;2. 编写的分析程序能够对实验一的结果进行正确的语法分析;3. 对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;四、实验步骤1. 定义目标语言的语法规则;2. 求解预测分析方法需要的符号集和分析表;3. 依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;4. 对遇到的语法
11、错误做出错误处理。五、实验内容1. 实验代码/sfyxfx.cpp程序的主入口其中Stack在上一个程序中已经实现了 2.实验运行效果六、 实验分析以及感想构造方法以及算法直观算符优先分析法使用两个工作栈。OPTR-寄存操作符及,初值为,(输入串末尾也加)OPND-寄存操作数及结果,初值为空,最后为运算结果。设Q代表OPTR栈顶的当前符号,a代表新的输入符号,则直观算符优先算法为:1Read next symbol to a;2If a=i then push a into OPND,GOTO 1;3If Q a then Call E(1)QE(2);GOTO 3; (注:E(1)QE(2)指pop E(1);pop E(2); t:=E(1),&,E(2)进行Q运算;push t;pop Q);4If Q a then If Q=( and a=) then pop Q;GOTO 1; If Q=a= then success; halt. 5If Q a then push a into OPTR;GOTO 1;6If (Q,a)=Err. Then Call ERROR. 26
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2