1 / 19
文档名称:

编译原理 实验三 实验报告.doc

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

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

分享

预览

编译原理 实验三 实验报告.doc

上传人:bb21547 2018/9/24 文件大小:245 KB

下载得到文件列表

编译原理 实验三 实验报告.doc

文档介绍

文档介绍:实验报告
第 1 页
专业____软件工程________ 班级____2_____ 姓名_71李飞强77欧艺欣81吴文浩 89张泰鑫__ 组别:第四组
实验日期:2014年 3 月 26 日报告退发(订正、重做)
课程编译原理实验名称递归下降的预测分析
一、实验目的
1. 学会用语法图来形式化地描述一门简单的语言;
2. 掌握递归下降的预测分析;
3. 掌握词法分析。
二、实验环境
Visual Studio 或 GCC 或Eclipse
三、实验内容、步骤和结果分析
实验内容:
请基于递归下降的分析方法(教材P55页),编写一个“”所对应语言的语法分析器。该语法分析器能读入一个源代码文件(如“”文件所示),并判断其中的源代码是否符合“”的规定。如果符合,打印出Yes;如果不符合,打印出No。(所用编程语言不限)
C语言版:
#include<>
#include<>
#include<>
#define MaxIdLen 20 //标志符的最大长度
#define KeyWordsCount 5 //该语言拥有的关键字个数
#define BoolValueCount 2 //bool类型可能取值的个数
#define SymTypeCount 17 //symType个数

enum SymType//枚举
{
OR , //或
AND, //与
LP, //左括号
RP, //右括号
ID, //标志符
ASSIGN, //赋值
LB, //左大括号
RB, //右大括号
COMMA, //逗号
SEMICOLON, //分号
UNDEFINED, //未定义
BOOLVALUE, //bool类型的值
IF, //if
ELSE, //else
WHILE, //while
PRINTF, //printf
BOOL, //bool
};
enum boolValue
{
TRUE,
FALSE,
};
//关键字
static char * keywords[KeyWordsCount] = {
"if",
"else",
"while",
"printf",
"bool",

};
//关键字对应类别
static int keyType[KeyWordsCount] = {
IF,
ELSE,
WHILE,
PRINTF,
BOOL,

};
//
static char * boolvalue[BoolValueCount]={
"true",
"false",
};
static int boolValueType[BoolValueCount]={
TRUE,
FALSE,
};

char ch=' '; //当前字符
char id[MaxIdLen+1]; //当前符号串
int token; //当前记号(的类型)
int value; //当前记号的值
FILE * fp; //用来打开要识别的源代码文件
int lineNum=1; //要识别的代码行数
bool isPass = false ; //判断识别的代码是否全部合法

void getToken();
void program();
void program();
void statement();
void definition();
void term();
void factor();
void expression();
void match(int t);
void main()
{
fopen_s(&fp,"D:\\","r");
getToken();
program();
if(isPass)
printf("Y\n");
else printf("N\n");
fclose(fp);

}
/****************************************
lexical
*****************************************/

int getKeyWord(char * str){
for(int i=0;i<KeyWordsCount;i++)
if(strcmp(str,keywords[i])==0)
return keyType[i