1、作者:西南大学 (小刁) 欢迎交流 qq:372688974Micro 语言词法分析器相关内容一、程序说明:在默认情况下,程序是对当前目录下的 micro.txt 文件的 micro 语言进行编辑。结果在屏幕上显示,同时也把结果放在了当前目录下的 answer.txt 文件中。二、单词符号的种别码及相应定义见下表:单词符号 种别码 内码值表示符 0 $idBegin 1 $beginEnd 2 $endRead 3 $readWrite 4 $writeInt 5 $int常数 6 $constant_ 7 $note:= 8 $sign+ 9 $sum- 10 $minus; 11 $sem
2、icolon( 12 $left) 13 $right三、词法分析器的状态转换图请见实验报告册四、程序源代码:#include #include #define N 20char *label5=“begin“,“end“,“read“,“write“,“int“;int primary(char *s)int i=0;for(;i=65if(primary(letter)0)printf(“%d,$%sn“,primary(letter),labelprimary(letter)-1);cha=primary(letter)+48;key0=;key1=cha;key2=,;key3=$;s
3、trcat(key,labelprimary(letter)-1);作者:西南大学 (小刁) 欢迎交流 qq:372688974strcat(key,“n“);fputs(key,ans) ;elseprintf(“%d,$idn“,primary(letter);fputs(“0,$idn“,ans);for(j=0;j=48ch=fgetc(filetxt);printf(“6,$constantn“);fputs(“6,$constantn“,ans);for(j=0;j10;j+)numberj=0; /* 判断常量 */else if(ch=_)ch=fgetc(filetxt);i
4、f(ch=_)while(ch!=n)ch=fgetc(filetxt);printf(“7,$noten“);fputs(“7,$noten“,ans);/*ch=fgetc(filetxt); */ /* 判断注释符- */else if(ch=:)ch=fgetc(filetxt);if(ch=)printf(“8,$signn“);作者:西南大学 (小刁) 欢迎交流 qq:372688974fputs(“8,$signn“,ans);ch=fgetc(filetxt); /* 判断 : */else if(ch=+)printf(“9,$sumn“);fputs(“9,$sumn“,a
5、ns);ch=fgetc(filetxt); /* 判断+ */else if(ch=-)printf(“10,$minusn“);fputs(“10,$minusn“,ans);ch=fgetc(filetxt); /*判断- */else if(ch=;)printf(“11,$semicolonn“);fputs(“11,$semicolonn“,ans);ch=fgetc(filetxt); /* 判断; */else if(ch=()printf(“12,$leftn“);fputs(“12,$leftn“,ans);ch=fgetc(filetxt); /* 判断( */else
6、if(ch=)printf(“13,$rightn“);fputs(“13,$rightn“,ans);ch=fgetc(filetxt); /* 判断) */elseprintf(“there have unknow letter in the %d linen“,count);break; /* 判断是否有不可识别字符 */fclose(filetxt);fclose(ans);getch();作者:西南大学 (小刁) 欢迎交流 qq:372688974五、测试程序(保存在文件 miacro.txt 文件中):begin;int x;x:=10;_ hahahahhax:=(8+9-10)
7、;read(x);write(x);end;六、程序结果(默认保存在文件 answer.txt 文件中) :1,$begin11,$semicolon5,$int0,$id11,$semicolon0,$id8,$sign6,$constant11,$semicolon7,$note0,$id8,$sign12,$left6,$constant9,$sum6,$constant10,$minus6,$constant13,$right11,$semicolon3,$read12,$left0,$id13,$right11,$semicolon4,$write12,$left0,$id13,$right11,$semicolon2,$end11,$semicolon