编译原理词法分析器语法分析器实验报告(2)

2021-09-24 12:27

error(); } else {

if(X=='#') {

if(X==w) {

printf("%8c是该文法的句子!\n",' '); } else

error(); } else {

p=location(X,Vn); q=location(w,Vt);

char *S1="null",*S2="NULL";

if(strcmp(M[p][q].m,S1)==0||strcmp(M[p][q].m,S2)==0) //查找产生式 error(); else

{

char str0[100];

strcpy(str0,M[p][q].m);

printf("%15c-->%s\n",X,str0); //显示对应的产生式 if(strcmp(str0,"$")==0) goto opt1; else {

length=strlen(str0); //逆序进栈 for(m=length-1;m>=0;m--) {

pushlink(st,str0[m]); }

goto opt1; } } } } }

int main() {

int i,k,n,r;

char Vn[100],Vt[100],select;

printf("******************************************************************\n"); printf("对任意输入LL(1)文法的分析表,判断验证字符串是否为该文法的句子 \n"); printf("并能给出分析和演示过程。 \n");

printf("******************************************************************\n"); opt2:

printf("请输入各终结符(#号表示结束 )Vt[i]:\n"); for(i=0;i<100;i++) {

scanf("%c",&Vt[i]); if(Vt[i]=='#') {

r=i; break; } }

printf("请输入非终结符个数:\n"); scanf("%d",&n); getchar();

for (i=0;i<n;i++) {

printf("请输入非终结符Vn[%d]:\n",i); scanf("%c",&Vn[i]); getchar();

printf("请输入此非终结符对应各终结符的产生式右部(null或NULL表示出错;$表示空串):\n");

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

scanf("%s",M[i][k].m); getchar(); } } opt3:

printf("请输入要分析的字符串,且以#结束:\n"); analyse(Vn, Vt);

printf("********************请选择***********************\n"); printf(" 1: 输入字符串 \n"); printf(" 2: 输入新分析表 \n"); printf(" 0: 退 出 \n"); printf("*************************************************\n"); opt4: cin>>select; switch(select) {

case '1': {goto opt3;break;} case '2': {goto opt2;} case '0': {break;}

default: {printf("输入错误!请重新选择:"); goto opt4; break;} }

return 0; }

运行结果:

语法分析器 源程序:

#include<string.h> #include<iostream> using namespace std; char prog[100],token[10]; char ch;

int syn,p,m=0,n,row,sum=0;

char *rwtab[20]={"dim","if","do","stop","end" ,"and","begin","bool","case","char", "false","for","int","not","or","set","then","true","until","while" };

void scaner() { for(n=0;n<9;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

{ m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { token[m++]=ch; ch=prog[p++]; } token[m++]='\0'; p--; syn=21; for(n=0;n<20;n++) { if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } } else if((ch>='0'&&ch<='9')) { { sum=0; while((ch>='0'&&ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } } p--; syn=7+15; if(sum>32767) syn=-1; } else switch(ch) {

case'=':syn=8+15;token[0]=ch;break; case'+':syn=9+15;token[0]=ch;break; case'*': m=0; token[m++]=ch; ch=prog[p++]; if(ch=='*') {

syn=11+15; token[m++]=ch; } else { syn=10+15; p--; }

break;

case',':syn=12+15;token[0]=ch;break; case'(':syn=13+15;token[0]=ch;break; case')':syn=14+15;token[0]=ch;break; case'#':syn=0;token[0]=ch;break; case'<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=17+15; token[m++]=ch; } else if(ch=='=') { syn=16+15; token[m++]=ch; } else { syn=15+15; p--; } break;

case'>':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=19+15; token[m++]=ch; } else { syn=18+15; p--;

} break;

case':':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=21+15; token[m++]=ch; } else { syn=20+15; p--; } break;

case'/':syn=22+15;token[0]=ch;break; case'-':syn=23+15;token[0]=ch;break; case';':syn=24+15;token[0]=ch;break; default: syn=-1;break; } }

编译原理词法分析器语法分析器实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安全监测预警系统(中文)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: