编译原理--语义分析

编译原理--语义分析

ID:16269695

大小:46.50 KB

页数:21页

时间:2018-08-08

编译原理--语义分析_第1页
编译原理--语义分析_第2页
编译原理--语义分析_第3页
编译原理--语义分析_第4页
编译原理--语义分析_第5页
资源描述:

《编译原理--语义分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理--语义分析#include#include#include#include#include#includeusingnamespacestd;#defineMAXN20000constdoubleeps=1e-7;structQ{charres[100];charag1[100];charop[12];charag2[100];}q[300];//保存最后的结果三地址指令格式intcount=0,error;//记录结果集的条数in

2、tsyn,p,sum,kk,m,n,row,k,len;doubledsum,pos;charindex[800];//记录指数形式的浮点数charr[6][10]={"function","if","then","while","do","endfunc"};chartoken[MAXN],s[MAXN];charch;boolis_letter(charc){returnc>='a'&&c<='z'

3、

4、c>='A'&&c<='Z';}boolis_digtial(charc){returnc>='0'&&c<='9';}boolis_dot

5、(charc){returnc==','

6、

7、c==';';}voididentifier()//标示符的判断{m=0;while(ch>='a'&&ch<='z'

8、

9、ch>='0'&&ch<='9'){token[m++]=ch;ch=s[++p];}token[m]='';ch=s[--p];syn=10;for(n=0;n<6;n++)if(strcmp(token,r[n])==0){syn=n+1;break;}}voiddigit(boolpositive)//数字的判断{len=sum=0;ch=s[p];while(ch>='

10、0'&&ch<='9'){sum=sum*10+ch-'0';ch=s[++p];}if(ch=='.'){dsum=sum;syn=12;ch=s[++p];pos=0.1;while(ch>='0'&&ch<='9'){dsum=dsum+(ch-'0')*pos;pos=pos*0.1;ch=s[++p];}if(ch=='e'){index[len++]=ch;ch=s[++p];if(ch=='-'

11、

12、ch=='+'){index[len++]=ch;ch=s[++p];}if(!(ch>='0'&&ch<='9')){//cout<

13、<"Looooooooooook"<='0'&&ch<='9'){index[len++]=ch;ch=s[++p];}}}if(syn==-1

14、

15、(ch>='a'&&ch<='z')

16、

17、ch=='.'){syn=-1;//对数字开头的标识符进行判错。while(ch>='0'&&ch<='9'

18、

19、ch>='a'&&ch<='z'

20、

21、ch=='.')ch=s[++p];//找到下一次要判断的开头ch=s[--p];}else{ch=s[--p];syn=12;if(!positive)ds

22、um*=-1.0;}}else{if(ch>='a'&&ch<='z'){syn=-1;//对数字开头的标识符进行判错。while(ch>='0'&&ch<='9'

23、

24、ch>='a'&&ch<='z')ch=s[++p];//找到下一次要判断的开头ch=s[--p];}else{ch=s[--p];syn=11;if(!positive)sum*=-1;}}}voidTo_double(){inti;printf("(%d,%lf",syn,dsum);if(len){for(i=0;i

25、);len=0;}printf(")");}boolcheck_behind_digit(){inti=p+1;while(s[i]!=''){if(s[i]>='0'&&s[i]<='9')returntrue;elseif(s[i]!=''&&s[i]!='t'&&s[i]!='')returnfalse;i++;}returnfalse;}boolcheck_pre_prog(){inti=p-1;while(i>=0){if(s[i]!=''&&s[i]!='t'&&s[i]!=''){if(s[i]>='0'&&s

26、[i]<='9'

27、

28、s[i]>='a'&&s[i]<='z')returnfalse;elsereturntrue;}i--;}returntrue;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。