资源描述:
《编译原理--语法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理--语法分析#include#include#include#includeusingnamespacestd;#defineMAXN20000intsyn,p,sum,kk,m,n,row,error;doubledsum,pos;charindex[800],len;//记录指数形式的浮点数charr[6][10]={"function","if","then","while","do","endfunc"};chartoken[MAXN],s[MAXN];charch;boolis_letter(ch
2、arc){returnc>='a'&&c<='z'
3、
4、c>='A'&&c<='Z';}boolis_digtial(charc){returnc>='0'&&c<='9';}boolis_dot(charc){returnc==','
5、
6、c==';';}voididentifier()//标示符的判断{m=0;while(ch>='a'&&ch<='z'
7、
8、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
9、){syn=n+1;break;}}voiddigit(boolpositive)//数字的判断{len=sum=0;ch=s[p];while(ch>='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=='-'
10、
11、ch=='+')
12、{index[len++]=ch;ch=s[++p];}if(!(ch>='0'&&ch<='9')){//cout<<"Looooooooooook"<='0'&&ch<='9'){index[len++]=ch;ch=s[++p];}}}if(syn==-1
13、
14、(ch>='a'&&ch<='z')
15、
16、ch=='.'){syn=-1;//对数字开头的标识符进行判错。while(ch>='0'&&ch<='9'
17、
18、ch>='a'&&ch<='z'
19、
20、ch=='.')ch=s[++p];//找到下一次要判断的开头ch=s[--p
21、];}else{ch=s[--p];syn=12;if(!positive)dsum*=-1.0;}}else{if(ch>='a'&&ch<='z'){syn=-1;//对数字开头的标识符进行判错。while(ch>='0'&&ch<='9'
22、
23、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;i24、)printf("%c",index[i]);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'&
25、&s[i]<='9'
26、
27、s[i]>='a'&&s[i]<='z')returnfalse;elsereturntrue;}i--;}returntrue;}voidpot(){while(1){ch=s[++p];if(ch=='')row++;if(!(ch==''
28、
29、ch=='t'
30、
31、ch==''))break;}}voidscaner(){memset(token,0,sizeof(token));pot();if(is_letter(ch)){syn