编译原理语法分析实验二.doc
文本预览下载声明
编译原理程序设计实验报告
——实验题目
班级:计算机1306 姓名:于厚艺 学号实验目标:表达式语法分析器的设计实现
递归下降子程序
LL(1)分析法
实验内容:
概要设计
按照流程图,调用子程序实现;
通过ll(1)分析表和对应压栈、弹栈操作实现。
流程图
递归:
Z’(main):开始
Read(w)
E
#?
N
Err
结束
入口
入口
E: E1:
+?
T
Y
E1
Read(w)
-?
N
出口
Y
T
N
出口
入口
入口
T: T1:
*?
F
Y
Read(w)
/?
T1
N
出口
Y
T
N
入口
出口
F:
(?
I?
N N err
Read(w)
Y Y
Read(w)
E
)?
出口
Y N err
LL(1):
调用函数token()切分单词
构建LL(1)分析表
开始
调用*Analyse(char *token)进行分析
结束
关键函数
递归下降子程序
void E(); //E-TX;
int E1(); //X-+TX | e
void T(); //T-FY
int T1(); //Y-*FY | e
int F(); //F-(E) | i
LL(1)分析法
char *Find(char vn,char vt)//是否查到表
char *Analyse(char *token)//分析过程
int Token()//将token中数字表示成i,标识符表示成n
源程序代码:(加入注释)
递归下降子程序:
#includestdio.h
#includeiostream
#include string.h
#include stdlib.h
using namespace std;
/********全局变量**********/
char str[30];
int index=0;
void E(); //E-TX;
int E1(); //X-+TX | e
void T(); //T-FY
int T1(); //Y-*FY | e
int F(); //F-(E) | i
FILE *fp;
char cur;
/*************主函数************/
int main()
{
int len;
int m;
if((fp=fopen(source.txt,r))==NULL)
{
coutcan not open the source file!endl;
exit(1);
}
cur=fgetc(fp);
while(cur!=#)
{
E();
}
coutendl;
coutsuccessendl;
return 0;
}
/*************************************/
void E()
{
T();
E1();
}
/*************************************/
int E1()
{
if(cur==+)
{
cur=fgetc(fp);
T();
co
显示全部