当前位置:文档之家› 语法分析器构造

语法分析器构造

编译原理实验报告实验题目:语法分析器构造
~
指导教师:
姓名:
班级:
学号:。

实验成绩:
实验题目语法分析器构造

实验目的和要求借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查并产生相应的归约信息。

同时给出出错信息和错误类型,从而加深对语法分析的理解。

设计思想与框架*
main函数:
算术表达式函数:
算符优先算法:
核心算法主要数据结构说明:
符号栈:stack[N]
栈顶指针:top

记录归约步骤号:No[N]
输入字符串:strings[N]
算术表达式:old_strings[N]
记录下一个输入符号:a
可归约字符串:*word[6]
手动生成的算符优先表:x[9][9]
查找算符表达式:expression(char *str)
入栈:push(char ch)
int top=-1;
int k=0;表示项.F表示因子.i表示变量或常数.\n");
printf(" 优先表\n");
printf(" + - * / ( ) i #\n");
printf(" + > > < < < > < >\n");
printf(" - > > < < < > < >\n");
printf(" * > > > > < > < >\n");
printf(" / > > > > < > < >\n");
printf(" ( < < < < < = < e1\n");

printf(" ) > > > > e2 > e2 >\n");
printf(" i > > > > e2 > e2 >\n");
printf(" # < < < < < e3 < =\n");
if((fp=fopen("预处理.txt","r"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
char ch[4048]={'\0'};
int i=0,j=0;

ch[0]=fgetc(fp);
while(ch[i]!='#')//将预处理文件的内容读入至数组ch中
ch[++i]=fgetc(fp);
ch[++i]='\0';
fclose(fp);
i=0;
while(ch[i]!='#')
{
memset(strings,0,sizeof(strings));//输入表达式strings初始化
memset(old_strings,0,sizeof(old_strings));。

expression(ch);//查找算术表达式
if(ch[sr]=='\0')
break;
printf("算术表达式%d为:%s\n",id,old_strings);
printf("转换为输入串:%s\n",strings);
printf(" 步骤号符号栈优先关系当前分析符剩余输入串动作\n");
analysis();//算符优先分析
int n=0;
printf("\n算术表达式%d的归约产生式步骤号为:",id++);
while(No[n])

{
实验结果
实验心得这次实验让我更进一步弄清楚了算符优先文法的概念,弄懂了从找出终结符firstVT集合、lastVT集合,到构造算符优先表,再到查
找句型的最左素短语,最后进行算符优先归约这一整个过程,让我
对语法分析器的构造有了深刻的理解。

也锻炼了我利用C语言编写。

相关主题