教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

实验报告_算符优先分析器[1] 2

来源:网络收集 时间:2026-07-27
导读: 实验报告语法分析器 实验二 算符优先分析器 #include stdio.h #include stdlib.h #include iostream.h char data[20][20]; //算符优先关系 char s[100]; //模拟符号栈s char lable[20]; //文法终极符集 char input[100]; //文法输入符号串 char string[20][1

实验报告语法分析器

实验二 算符优先分析器

#include "stdio.h"

#include "stdlib.h"

#include "iostream.h"

char data[20][20]; //算符优先关系

char s[100]; //模拟符号栈s

char lable[20]; //文法终极符集

char input[100]; //文法输入符号串

char string[20][10]; //用于输入串的分析

int k;

char a;

int j;

char q;

int r; //文法规则个数

int r1; //转化后文法规则个数

char st[10][30]; //用来存储文法规则

char first[10][10]; //文法非终结符FIRSTVT集

char last[10][10]; //文法非终结符LASTVT集

int fflag[10]={0}; //标志第i个非终结符的FIRSTVT集是否已求出 int lflag[10]={0}; //标志第i个非终结符的LASTVT集是否已求出 int deal(); //对输入串的分析

int zhongjie(char c); //判断字符c是否是终极符

int xiabiao(char c); //求字符c在算符优先关系表中的下标 void out(int j,int k,char *s); //打印s栈

void firstvt(char c); //求非终结符c的FIRSTVT集

void lastvt(char c); //求非终结符c的LASTVT集

void table(); //创建文法优先关系表

void main()

{

int i,j,k=0;

printf("请输入文法规则数:");

scanf("%d",&r);

printf("请输入文法规则:\n");

for(i=0;i<r;i++)

{

scanf("%s",st[i]); //存储文法规则,初始化FIRSTVT集和LASTVT集*/

first[i][0]=0; /*first[i][0]和last[i][0]分别表示st[i][0]非终极

符的FIRSTVT集和LASTVT集中元素的个数*/

last[i][0]=0;

}

for(i=0;i<r;i++) //判断文法是否合法

{

for(j=0;st[i][j]!='\0';j++)

实验报告语法分析器

{

if(st[i][0]<'A'||st[i][0]>'Z')

{

printf("不是算符文法!\n");

exit(-1);

}

if(st[i][j]>='A'&&st[i][j]<='Z')

{

if(st[i][j+1]>='A'&&st[i][j+1]<='Z')

{

printf("不是算符文法!\n");

exit(-1);

}

}

}

}

for(i=0;i<r;i++)

{

for(j=0;st[i][j]!='\0';j++)

{

if((st[i][j]<'A'||st[i][j]>'Z')&&st[i][j]!='-'&&st[i][j]!='>'&&st[i][j]!='|')

lable[k++]=st[i][j];

}

}

lable[k]='#';

lable[k+1]='\0';

table();

printf("每个非终结符的FIRSTVT集为:\n"); //输出每个非终结符的FIRSTVT集 for(i=0;i<r;i++)

{

printf("%c: ",st[i][0]);

for(j=0;j<first[i][0];j++)

{

printf("%c ",first[i][j+1]);

}

printf("\n");

}

printf("每个非终结符的LASTVT集为:\n"); //输出每个非终结符的LASTVT集 for(i=0;i<r;i++)

{

printf("%c: ",st[i][0]);

实验报告语法分析器

for(j=0;j<last[i][0];j++)

{

printf("%c ",last[i][j+1]);

}

printf("\n");

}

printf("算符优先分析表如下:\n");

for(i=0;lable[i]!='\0';i++)

printf("\t%c",lable[i]);

printf("\n");

for(i=0;i<k+1;i++)

{

printf("%c\t",lable[i]);

for(j=0;j<k+1;j++)

{

printf("%c\t",data[i][j]);

}

printf("\n");

}

printf("请输入文法输入符号串以#结束:");

scanf("%s",input);

deal();

}

void table()

{

char text[20][10];

int i,j,k,t,l,x=0,y=0;

int m,n;

x=0;

for(i=0;i<r;i++)

{

firstvt(st[i][0]);

lastvt(st[i][0]);

}

for(i=0;i<r;i++)

{

text[x][y]=st[i][0];

y++;

for(j=1;st[i][j]!='\0';j++)

{

if(st[i][j]=='|')

{

text[x][y]='\0';

实验报告语法分析器

x++; y=0; text[x][y]=st[i][0]; y++; text[x][y++]='-'; text[x][y++]='>'; } else { text[x][y]=st[i][j]; y++; } } text[x][y]='\0'; x++; y=0; } r1=x; printf("转化后的文法为:\n"); for(i=0;i<x;i++) //输出转化后的文法规则串 { printf("%s\n",text[i]); } for(i=0;i<x;i++) /*求每个终结符的推导结果(去掉"->" 后的转化文法,用于最后的规约)*/ { string[i][0]=text[i][0]; for(j=3,l=1;text[i][j]!='\0';j++,l++) string[i][l]=text[i][j]; string[i][l]='\0'; } for(i=0;i<x;i++) { for(j=1;text[i][j+1]!='\0';j++) { if(zhongjie(text[i][j])&&zhongjie(text[i][j+1])) { m=xiabiao(text[i][j]); n=xiabiao(text[i][j+1]); data[m][n]='='; }

实验报告语法分析器

if(text[i][j+2]!='\0'&&zhongjie(text[i][j])&&zhongjie(text[i][j+2])&&!zhongjie(text[i][j+1]))

{

m=xiabiao(text[i][j]);

n=xiabiao(text[i][j+2]);

data[m][n]='=';

}

if(zhongjie(text[i][j])&&!zhongjie(text[i][j+1]))

{

for(k=0;k<r;k++)

{

if(st[k][0]==text[i][j+1])

break;

}

m=xiabiao(text[i][j]);

for(t=0;t<first[k][0];t++)

{

n=xiabiao(first[k][t+1]);

data[m][n]='<';

}

}

if(!zhongjie(text[i][j])&&zhongjie(text[i][j+1]))

{

for(k=0;k<r;k++)

{

if(st[k][0]==text[i][j])

break;

}

n=xiabiao(text[i][j+1]);

for(t=0;t<last[k][0];t++)

{

m=xiabiao(last[k][t+1]);

data[m][n]='>';

}

}

}

}

m=xiabiao('#');

for(t=0;t<first[0][0];t++)

{

n=xiabiao(first[0][t+1]);

data[m][n]='<';

}

n …… 此处隐藏:4280字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验报告_算符优先分析器[1] 2.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/983185.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)