编译原理 词法分析器(Compiler Principle lexical analyzer).doc

编译原理 词法分析器(Compiler Principle lexical analyzer).doc

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

编译原理 词法分析器(Compiler Principle lexical analyzer) #包括 stdio. h #包括字符串。” #定义max_size 128 字符键[ ] [ max_size ] = {“暗淡”、“如果”、“做”、“停止”、“结束”};//定义关键字表 char * Concat(char * strtoken,ch)/连接函数 { char温度[ 2 ]; 温度[ 0 ] = CH; 临时[ 1 ] =“0”;/“0”为结束字符 将连接/ * * /(strtoken,温度);/ /将温度连接到strtoken并返回 返回strtoken; } //是否为字母 int IsLetter(ch) { 如果(((CH =‘A’)和(CH = z))| |((CH =‘A’)和(CH =“Z”))) 返回1; 其他的 返回0; } / /是否为数字 int IsDigit(ch) { 如果(“0”和“9”) 返回1; 其他的 返回0; } / /是否是关键字 国际储备(char * strtoken) { 为(int i = 0;i 38;i++)/数组标号最大为37,一共有38个数组 { 如果(0 = = strcmp(strtoken,关键[我])) 返回1; } 返回0; } Bool isdim (char * strtoken) { For (int i = 0; I 3; I + +) { If (0 = = StrCmp (strtoken, dim)) { Return 1; } } Return 0; } Bool isstop (char * strtoken) { For (int i = 0; I 4; I + +) { If (0 = = StrCmp (strtoken, stop)) { Return 1; } } Return 0; } Bool isif (char * strtoken) { For (int i = 0; I 2; I + +) { If (0 = = StrCmp (strtoken, if)) { Return 1; } } Return 0; } Bool isdo (char * strtoken) { For (int i = 0; I 2; I + +) { If (0 = = StrCmp (strtoken, )) { Return 1; } } Return 0; } Bool Isend (char * strtoken) { For (int i = 0; I 3; I + +) { If (0 = = StrCmp (strtoken, end)) { Return 1; } } Return 0; } / / 词法分析函数 Void analysis (file * file) { Char strtoken [Max _ size]; Char ch; While ((CH = fgetc (file). = EOF) / / 不到文件最后一直打开 { / / 将字符串清空 Memset (strtoken, 0, Max _ size); If ((CH = = \ t) | | (CH = = \ n) | | (CH = = )) { } Else if (isletter (CH)) { 而(IsLetter(CH)| | IsDigit(CH)) { Concat(strtoken,CH); CH =指针(文件); } fseek(文件- 1L,seek_cur); / /判断是否为关键字 如果(储备(strtoken)) { 如果(IsDIM(strtoken)) { printf(“%s:$暗淡”,strtoken); 继续; } 如果(IsDO(strtoken)) { printf(“%s:$做\n”,strtoken); 继续; } 如果(IsSTOP(strtoken)) { printf(“%s:$停止\n”,strtoken); 继续; } 如果(IsIF(strtoken)) { printf(“%s:$如果\n”,strtoken); 继续; } 如果(IsEND(strtoken)) { printf(“%s:美元\n”,strtoken); 继续; } printf(“%s:为关键字\n”,strtoken); } 其他的 { printf(“%s:$id \n”,strtoken); } } 如果(IsDigit(CH)) { 而(IsDigit(CH)) { Concat(strtoken,CH); CH =指针(文件); } / /让文件流指针后退一个字节 f

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档