编译原理实验2的
《编译原理》
实验报告
项目名称 预测分析法设计与实现
专业班级
学 号
姓 名
实验成绩:
批阅教师:
年 月 日
实验2《预测分析法设计与实现》
实验学时: 2 实验地点: 实验日期:
一、实验目的
加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。
二、实验内容
在实验1的基础上,用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。
三、实验方法
用到了栈结构,用C语言。
四、实验步骤
定义目标语言的语法规则;
求解预测分析方法需要的符号集和分析表;
依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;
对遇到的语法错误做出错误处理。
五、实验结果
六、实验结论
#include
#include
#include
using namespace std;
typedef struct table //分析表存储结构
{
char m[100];
}table;
table M[100][100]; //定义分析表
typedef struct stacknode //定义栈内元素节点 (带头结点(为空)的)
{
char data;
struct stacknode *next;
}stackk;
void initlink(stackk *&s) //初始化新栈
{
s=(stackk *)malloc(sizeof(stackk));
s->next=NULL;
}
void poplink(stackk *&s) //顶元素出栈
{
stackk *p;char v;
if(s->next!=NULL)
{
p=s->next;
v=p->data;
s->next=p->next;
}
free(p);
}
void pushlink(stackk *&s,char x) //新 元 素 入 栈
{
stackk *p;
p=(stackk *)malloc(sizeof(stackk));
p->data=x;
p->next=s->next;
s->next=p;
}
void display(stackk *s) //打印 现实显示 栈内元素
{
stackk *p;
int i=0,j;
char st[100];
p=s->next;
while(p!=NULL)
{
st[i++]=p->data;
p=p->next;
}
for(j=i-1;j>=0;j--)
printf("%c",st[j]);
for(j=0;j<16-i;j++) //打印 对齐格式
printf("%c",' ');
}
char gettop(stackk *s) //返 回 栈 顶 元 素 值
{
if(s->next==NULL)
return 0;
else
return s->next->data;
}
int find(char c,char array[]) //查找函数,
{
int i;
int flag=0;
for(i=0;i<100;i++)
{
if(c==array[i])
flag=1;
}
return flag;
}
int location(char c,char array[]) //定位函数,指出字符所在位置
{
int i;
for(i=0;i<100;i++)
{
if(c==array[i])
return i;
}
}
void error() //出错函数定义
{
printf("%1