1、编译原理试验报告专业:计算机科学与技术班级:5 班姓名:何利慧学号:040104051122指导老师:胡伦俊完成时间:2007 年 5 月 23 日实验目录一 实验内容1. 实验一内容及目的2. 实验二内容及目的二 实验要求1. 词法分析程序(1) 待分析的简单语言的词法(2) 各种单词对应的种别码(3) 词法分析程序的功能2. 语法分析程序(1) 待分析的简单语言(2) 实验要求说明三 程序中用到的全程变量及所存放信息1. 实验一中全程变量及说明2. 实验二中全程变量及说明四 程序清单1. 程序流程图2. 程序源代码五 编译程序中能识别出的错误信息六 问题编写程序中遇到的问题及解决方法七 心
2、得体会一. 实验内容:实验一:设计,编制并调试一个词法分析程序,加深对词 法 分 析程 序 原 理 的 理 解 。实验二:语 法 分 析 程 序 : 编 制 一 个 递 归 下 降 语 法 分 析 程 序 , 实 现 对 词法 分 析 程 序 所 提 供 的 单 词 序 列 的 语 法 检 查 和 结 构 分 析 。二. 实验要求:实验一:词法分析程序实验要求1 待分析的简单语言的词法:(1) 关键字:begin if then while do end(2)运算符::= + - * / = = ; ( ) #(3)其他单词是标识符(ID )和整型常数(NUM) ,通过以下正规式定义:ID=l
3、etter(letter|digit)*NUM=digit digit*(4)空格由空白,制表符和换行符组成。空格一般用来分隔ID,NUM ,运算符,界符和关键字,词法分析阶段通常被忽略。2各种单词符号对应的种别码:单词符号 种别码单词符号 种别码begin 1 : 17if 2 := 18then 3 21do 5 23lette(lette|digit)* 10 = 24digit digit* 11 = 25+ 13 ; 26- 14 ( 27* 15 ) 28/ 16 # 03.词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token,或 sum)构成的序列。
4、其中:syn 为单词种别码;Token 为存放的单词自身字符串;Sum 为整型常数。实验二:语法分析程序实验要求1 待 分 析 的 简 单 语 言 :用 扩 充 的 BNF表 示 如 下 :1、 : : = begin end 2、 : : =; 3、 : : = | if then | while do 4、 : : = 5、 : : =ID:= 6、 : : =+ | - 7、 : : = * | / 8、 : : =ID | NUM |( )2 实 验 要 求 说 明 :输 入 单 词 串 , 以 “#”结 束 , 如 果 是 文 法 正 确 的 句 子 , 则 输 出 成 功 信 息
5、,打 印 “success”, 否 则 输 出 “error”。例 如 :输 入 : begin x:=9; if x0 then x:=(x+1)*6; while a=0 do b:=2*x/3 end #输出:s uccess输 入 : x:=a+b*c end #输 出 : error三. 程序中所用到的全程变量以及所存 放的信息:实验一中全程变量及所存信息:char prog80; /*存放输入的语句*/char token8; /*存放字符串*/char ch; /*存放单词的缓冲区*/int syn; /*单词种别码*/int p; /*缓冲区 prog 的指针*/int m;
6、/*token 的指针*/int n; /*关键字表序号 */int sum; /*存放种别码*/实验二中全局变量及所存信息:char prog80; /*存放输入的语句*/char token8; /*存放字符串*/char ch; /*存放单词的缓冲区*/int syn; /*单词种别码*/int p; /*缓冲区 prog 的指针*/int m; /*token 的指针*/int n; /*关键字表序号 */int sum; /*存放种别码*/int kk;/*kk=0 表示无语法错误, kk=1 表示有语法错误*/char *rwtab6=“begin“,“if“,“then“,“while“,“do“,“end“; /*关 键 字 表 */四. 程序清单:1 程序流程图:实验一:词法分析流程图(1) 词法分析主程序示意图:是(2)词法分析程序流程图:输出单词二元组置处值调用扫描子程序输入串结束?结束实验二:语法分析流程图(1) 语法分析主程序示意图:(2)递归下降分析示意图:置初值调用 scaner 读下一个单词符号调用 lrparser结束() 语句串分析过程示意图:() statement 语句分析函数示意图:() expression()函数分析示意图: