开发工具:
文件大小: 5kb
下载次数: 0
上传时间: 2013-10-23
详细说明:
编译原理,词法翻译源代码: #include #include #include #include using namespace std; char prog[80],token[8],s_error[80]; char ch; int syn,p,m=0,n,row,error; int flag;//标志正负 double sum=0; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner() { error = 0; /* 共分为三大块,分别是标示符、数字、符号,对应下面的 if else if 和 else */ for(n=0;n<8;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=10; for(n=0;n<6;n++) //将识别出来的字符和已定义的标示符作比较, if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>='0'&&ch<='9')||(ch == '+')||(ch == '-')) //数字或+,- { strcpy(s_error,""); int pp=p-1; sum =0; syn = 11; flag=1;//默认为正 if(ch == '+'|| ch == '-') { if(prog[p]<'0' || prog[p]>'9')//就是+,- { syn=(ch=='+'?15:16); //if(ch == '+') // syn = 15; //else // syn = 16; token[0]=ch; } else//后面跟数字 if(ch == '-') flag =-1; } else//数字开头 { sum= ch-'0'; } if(syn == 11)//是数字 { syn=11; ch=prog[p++]; while(ch>='0'&&ch<='9') { sum = sum*10+ch-'0'; ch=prog[p++]; } sum*= flag; if(ch == '.')//有小数部分 { ch=prog[p++]; double round=0.1; if(ch<'0'||ch>'9') { syn = -1; error=1;//一号错误 for(int i=0;i='0'&&ch<='9') { sum+= round*(ch-'0'); ch=prog[p++]; round/= 10; } } if(ch == 'e' && syn>0)//是浮点数 { flag = 1; int temp=0; ch=prog[p++]; if((ch>='0'&&ch<='9')||(ch == '+')||(ch == '-')) { if((ch == '+')||(ch == '-')) { if(ch == '-') flag=-1; ch=prog[p++]; } if(ch<'0'||ch>'9') { syn = -1; error=2; for(int i=0;i='0'&&ch<='9') { temp= temp*10+ch-'0'; ch=prog[p++]; } } else { syn=-1; error = 2; for(int i=0;i='0'&&ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } } p--; syn=11; if(sum>32767) syn=-1;*/ } else switch(ch) //其他字符 { case'<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=21; token[m++]=ch; } else if(ch=='=') { syn=22; token[m++]=ch; } else { syn=23; p--; } break; case'>':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=20; p--; } break; case':':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=18; token[m++]=ch; } else { syn=17; p--; } break; case'*':syn=13;token[0]=ch;break; case'/': { if(prog[p]!='*') { syn=14; token[0]=ch; break; } else { syn=-10086; ch=prog[p++];//把*读进来 ch=prog[p++];//读下一个 while(!(ch=='*' && prog[p]=='/')) ch=prog[p++];//直到ch为*,下一个为/ ch=prog[p++];//读出/ break; } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.