15c语言实验报告(四)-2,编译原理实验2的.doc

编译原理实验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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值