《编译原理》实验指导书2.doc

《编译原理》实验指导书2

实验一 词法分析 一、实验目的 (实验日期:2011.3.21) 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验要求 编制一个读单词过程,源程序为一个文件,读取该文件,识别出各个具有独立意义的单词,并依次输出各个单词的内部编码及单词符号自身值。 单词的内部编码如下: 1、保留字:main、if、int、for、while、do、return、break、continu单词种别码分别为1~92、标识符:除保留字外的以字母开头,后跟字母、数字的字符序列单词种别码为20 3、常数为无符号数;单词种别码为30 4、运算符包括:+、-、*、/、=、、、=、=、==、!=;单词种别码为41~51 5、分隔符包括:;、{、}、(、); 单词种别码为61~6。 单词符号 种别码 单词符号 种别码 main 1 / 44 int 2 = 45 if 3 46 for 4 47 while 5 = 48 do 6 = 49 return 7 == 50 break 8 != 51 continue 9 ID 20 ; 62 NUM 30 { 63 + 41 } 64 - 42 ( 65 * 43 ) 66 三、预习提示 1、模块结构参照教材图.22。 四、实验过程和指导 1、准备 (1) 课本有关章节; (2) 编制好程序; (3) 准备多组测试数据。 2、为了能设计好程序,注意以下事情: (1) 模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。 (2) 设计方案:模块关系简图、流程图、全局变量、函数接口等。 (3) 编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 五、 源程序文件内容如下: main() { int a, b; a = 10; b = a + 20; } 要求输出如下: (,) (65,) (,) (63,(20,) (61,) (20,) (62,) (20,”a”) (4,) (30,10) (,”;”) (2,”b”) (45,) (20,”a”) (4,) (30,20) (,) (66,) 实验二 预测分析法 一、实验目的(实验日期:2009.4.28) 根据某一LL(1)文法编制调试预测分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析法的理解。 二、实验要求 本次实验的LL(1)文法为表达式文法: E→E+T | T T→T*F | F F→i | (E) 编写识别表达式文法的合法句子的预测分析程序,对输入的任意符号串,给出分析过程及分析结果。分析过程要求输出步骤、分析栈、剩余输入串和所用产生式。如果该符号串不是表达式文法的合法句子,要给出尽量详细的错误提示。 三、实验过程 1、准备 (1) 阅读课本有关章节; (2) 初步编制好程序; (3) 准备多组测试数据。 2、上机调试 3、思路 将表达式预测分析表存到一个数组中,参照教材图5.11预测分析程序的框图编写分析程序。 4、为了能设计好程序,注意以下事情: (1) 模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。 (2) 写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 (3) 编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 实验三 LR分析法 一、实验目的(实验日期:2009.5.19) 掌握用LR分析法对表达式文法进行自底向上语法分析的算法,加深对LR分析法的移进,归约等操作理解。 二、实验要求 本次实验的SLR(1)文法为表达式拓广文法: S’→E E→E+T E→T T→T*F T→F F→(E) F→i 改进后的SLR(1)分析表如教材142页图7.8。 编写识别表达式拓广文法的合法句子的SLR(1)分析程序,对输入的任意符号串,给出分析过程及分析结果。分析过程要求输出步骤、状态栈、符号栈、输入串和语法动作。如果该符号串不是表达式文法的合法句子,要给出尽量详细的错误提示。 三、实验过程 1、准备 (1) 阅读课本有关章节; (2) 初步编制好程序; (3) 准备多组测试数据。 2、上机调试 3、思路 将改进后的SLR(1)分析表存到一个数组中,参照教材118页的LR分析程序编写分析程序。 4、为了能设计好程序,注意以下事情: (1) 模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。 (2) 写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 (3) 编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 附录1:实验报告格式 _______

文档评论(0)

1亿VIP精品文档

相关文档