c语言基本简单词法分析器.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言基本简单词法分析器

保留字:K 标识符:I 常数:C 分界符:P 各类单词以二元表达式构成,形式:(单词种别t,单词自身值i) 单词种别: 关键字、变量: 10 常量: 11 +: 13 -: 14 *: 15 /: 16 = : 25 ; : 26 ( : 27 ) : 28 ,:29 # : 0 #includestdio.h #includestring.h #includeconio.h #includectype.h char prog[80]={\0},token[8]; /*存放字符串*/ char ch; int syn, /*存放单词字符种别*/ n, sum, /*存放整数单词*/ m,p; /*m是token的指针,p是prog的指针*/ char *rwtab[6]={begin,if,then,while,do,end}; void scanner() { m=0; sum=0; for(n=0;n8;n++) {token[n]=\0;} ch=prog[p++]; while(ch== ) {ch=prog[p++];} if(isalpha(ch)) {while(isalpha(ch)||isdigit(ch)) {token[m++]=ch; ch=prog[p++]; } token[m++]=\0; ch=prog[p--]; syn=10; for(n=0;n6;n++) { if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } } else if(isdigit(ch)) { while(isdigit(ch)) { sum=sum*10+ch-0; ch=prog[p++]; } ch=prog[p--]; syn=11; } 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=20; ch=prog[p--]; } break; case:m=0;token[m++]=ch;ch=prog[p++]; if(ch===) { syn=24; token[m++]=ch; } else { syn=23; ch=prog[p--]; } break; case::m=0;token[m++]=ch;ch=prog[p++]; if(ch===) { syn=18; token[m++]=ch; } else { syn=17; ch=prog[p--]; } break; case10:syn=12;token[0]=n;break; case11:syn=12;token[0]=n;break; case+:syn=13;token[0]=ch;break; case-:syn=14;token[0]=ch;break; case*:syn=15;token[0]=ch;break; case/:syn=16;token[0]=ch;break; case=:syn=25;token[0]=ch;break; case,:syn=29;token[0]=ch;break; case;:syn=26;token[0]=ch;break; case(:syn=27;token[0]=ch;break; case):syn=28;token[0]=ch;break; case#:syn=0;token[0]=ch;break; default:syn=-1; } } main() { p=0; printf(\nplease input string:\n); do{ ch=getchar(); prog[p++]=ch; }while(ch!=#); p=0; do{ scanner(); switch(syn) { case 11:printf((%d,%d)\n,syn,sum);break; case -1:printf(\n error;\n);break; default:printf((%d,%s)\n,syn,token); } }while(syn!=0); getch(); } 程序测试:

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档