1 / 16
文档名称:

语法分析 实验报告.doc

格式:doc   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

语法分析 实验报告.doc

上传人:2890135236 2015/3/31 文件大小:0 KB

下载得到文件列表

语法分析 实验报告.doc

文档介绍

文档介绍:编译原理实验报告
实验名称: 语法分析
实验类型: 设计性实验
指导教师: 蒋勇
专业班级: 软件1001班
姓名: 李岳东
学号: 20101557
实验地点: 东6A-319
实验成绩:____________________________

日期:2012年月日
一、实验目的
编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
二、实验设计
三、实验过程
1)给定文法:(文法举例)
EàE+T|T
TàT*F|F
Fà(E)|i
2)构造FIRST()集和FOLLOW()集
表3-1 FIRST()集和FOLLOW()集
FIRST
FOLLOW
E
(,i
#,+,)
T
(,i
#,+,),*
F
(,i
#,+,),*

四、实验结果
表 4-1 分析成功

表 4-2 分析失败

表 4-3 载入文件出错


流程图如下所示:
五、附录:关键代码
#include <iostream>
#include <>
#include <>
#include <>
#include <>
using namespace std;
int TESTparse();
int program();
pound_Stat();
int statement();
int expression_Stat();
int expression_r();
int bool_expr();
int additive_expr();
int term();
int factor();
int if_stat();
int while_stat();
int for_stat();
int write_stat();
int read_stat();
int declaration_stat();
int declaration_list();
int statement_list();
pound_stat();
char token[20],token1[40];//token保存单词符号,token1保存单词值
char Scanout[300]; //保存词法分析输出文件名
FILE *fp; //用于指向输入输出文件的指针
//语法分析程序
int TESTparse()
{
int es=0;
if((fp=fopen(Scanout,"r"))==NULL)
{
printf("\n打开%s错误!\n",Scanout);
es=10;
}

if (es==0) es=program();
printf("=====语法分析结果!======\n");
switch(es)
{
case 0: printf("语法分析成功!\n");break;
case 10: printf("打开文件%s失败!\n",Scanout);break;
case 1: printf("缺少{!\n");break;
case 2: printf("缺少}!\n");break;
case 3: printf("缺少标识符!\n");break;
case 4: printf("少分号!\n");break;
case 5: printf("缺少(!\n");break;
case 6: printf("缺少)!\n");break;
case 7: printf("缺少操作数!\n");break;

}
fclose(fp);
return(es);
}
//<程序>::={<声明序列><语句序列>}
//program::={<declaration_list><statement_list>}
int program()
{
int es=0;
fscanf(fp,"%s %s\n",token,token1);
printf("%s %s\n",token,token1);
if(strcmp(token,"{"))//判断是否'{'
{
es=1;
return(es);
}
fscanf(fp,"%s %s\n",&token,&token1)