欢迎来到天天文库
浏览记录
ID:14917922
大小:49.00 KB
页数:11页
时间:2018-07-31
《语法分析器(递归下降)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#includeusingnamespacestd;//函数申明//变量长度#defineMAX_LENTH200//表长度#defineCON_LEN30//常量表#defineIDE_LEN30//标识符表#defineSTR_LEN30//字符串表//token#defineTOKEN_LEN30//编码#definec_identifier0#definec_char1#definec_string2#definec_constant3#definec_key_base40//其他编码在re
2、server数组中把索引加即可得到charreserve[][20]={"int","main","while","for","void","char","if","return","do","float"};chartoken[TOKEN_LEN]={''};typedefstructnode{intcode;intvalue;}Node;#defineNODE_LENTH120Noden[NODE_LENTH];intni=0;/*词法分析相关函数的声明*/intstate_machine(charch,intstate);intstate_to_code(intprestate);
3、intis_digit(charch);intis_char(charch);intis_key(char*);voidshow_table(char**t);voidshow_tokens(Node*n,intnum);/*语法分析的相关定义*/#definerule_row6#definerule_col4//stringexp0="2*(2*/4)#";intw;intpos=0;#defineend_file333/*语法分析相关函数的声明*/void_MAIN();void_E();void_T();void_F();void_P();void_Q();intis_d(int)
4、;intis_d(intch){if(ch==3
5、
6、ch==4
7、
8、ch==2)return1;elsereturn0;}voidmain(){//常数表char*con[CON_LEN];//标识符表char*ide[IDE_LEN];//符号串表char*str[STR_LEN];inti=0;intstate=1;intprestate;intf_read=1;intcode=0;charch='';intci=0,cj=0,ck=0;FILE*fp=NULL;charfilename[]="source.txt";//fopen_s(&fp,filename,"r");fp=fop
9、en(filename,"r");if(NULL==fp){cout<<"文件没有打开,程序退出"<10、11、ch==''12、13、ch=='t')&&state==1){f_read=1;continue;}prestate=state;state=state_machine(ch,14、state);if(state){f_read=1;token[i++]=ch;}else{f_read=0;token[i]=' ';i=0;state=1;if(prestate==2)//变量{intcc=is_key(token);if(0==cc)//变量{char*ct=(char*)malloc(sizeof(char)*MAX_LENTH+1);//strcpy_s(ct,sizeof(ct),token);strcpy(ct,token);ct[MAX_LENTH]=' ';ide[ci++]=ct;if(ci>=IDE_LEN){//printf("变量表溢出!!15、!!!!");//printf("%s__(%d,%d)",token,prestate,ci-1);n[ni].code=prestate;n[ni++].value=ci-1;cout<<"变量表溢出"<
10、
11、ch==''
12、
13、ch=='t')&&state==1){f_read=1;continue;}prestate=state;state=state_machine(ch,
14、state);if(state){f_read=1;token[i++]=ch;}else{f_read=0;token[i]=' ';i=0;state=1;if(prestate==2)//变量{intcc=is_key(token);if(0==cc)//变量{char*ct=(char*)malloc(sizeof(char)*MAX_LENTH+1);//strcpy_s(ct,sizeof(ct),token);strcpy(ct,token);ct[MAX_LENTH]=' ';ide[ci++]=ct;if(ci>=IDE_LEN){//printf("变量表溢出!!
15、!!!!");//printf("%s__(%d,%d)",token,prestate,ci-1);n[ni].code=prestate;n[ni++].value=ci-1;cout<<"变量表溢出"<
此文档下载收益归作者所有