文档介绍:编译原理实验三实验报告
2
———————————————————————————————— 作者:
———————————————————————————————— 日期:
个人收集 仅供参考学习 勿做商业用途
实 验 报 告
第 1 页
专业____软件工程________ 班级____2_____ 姓名_71李飞强77欧艺欣81吴文浩 89张泰鑫__ 组别:第四组
实验日期:2021年 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, //右括号
3
个人收集 仅供参考学习 勿做商业用途
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,
};
4
个人收集 仅供参考学习 勿做商业用途
//
static char * boolvalue[BoolValueCount]={
"true",
"false",
};
static int boolValueType[BoolValueCount]={
TRUE,
FALSE,
};
char ch=' '; //当前字符
char id[MaxIdLen+1];