构造miniC语言的词法分析程序,程序要求能对输入的字符串流进行词法分析,并输出相应的单词。miniC语言的单词包括整数、标识符、分隔符、运算符和关键字,编制相应的词法分析程序。 标识符 ID = letter (letter|digit)* 自己写的,感觉好多缺陷: #include <stdio.h> #include <stdlib.h> int is_letter(char cha) { if((cha >= ""a"" && cha <= ""z"") || (cha >= ""A"" && cha <= ""Z"")) return 1; else return 0; } int is_digit(char cha) { if(cha >= ""0"" && cha <= ""9"") return 1; else return 0; } int is_operator(char cha) { if(cha == ""+"" || cha==""-"" ||cha == ""*"" || cha==""/"" ||cha == ""<"" || cha==""<="" ||cha == ""=="" || cha==""="" ||cha == ""!="" || cha=="">"" || cha =="">="") return 1; else return 0; } int is_fgf(char cha) { if(cha==""("" || cha=="")"" || cha==""{"" || cha==""}"" || cha==""["" ||cha==""]"") return 1; else return 0; } int is_gjc(char *str) { char s1[]="if"; char s2[]="else"; char s3[]="return"; char s4[]="int"; char s5[]="void"; char s6[]="while"; char s7[]="main"; if(strcmp(str,s1)==0 || strcmp(str,s2)==0 || strcmp(str,s3)==0 || strcmp(str,s4)==0 || strcmp(str,s5)==0 || strcmp(str,s6)==0 || strcmp(str,s7)==0) return 1; else return 0; } int is_identify(char *str) { int state = 1; int i = 0; while(str[i] != ""\0"") { if(state == 1 && is_letter(str[i])) state=2; else break; if((state == 2 && is_letter(str[i])) || is_digit(str[i])) state=2; i++; } if(state == 2) return 1; else return 0; } int is_identify1(char *str) { int i=0; int j=1; while(str[i]!=""\0"") { if(!(is_digit(str[i]))) { j=0; break; } i++; } if(j==1) return 1; else return 0; } int is_identify2(char *str) { int i=0; int j=1; while(str[i]!=""\0"") { if(!(is_operator(str[i]))) { j=0; break; } i++; } if(j==1) return 1; else return 0; } int is_identify3(char *str) { int i=0; int j=1; while(str[i]!=""\0"") { if(!(is_fgf(str[i]))) { j=0; break; } i++; } if(j==1) return 1; else return 0; } int main() { char *str="a3232a"; int i,j,k,l,g; i=is_identify(str); j=is_identify1(str); k=is_identify2(str); l=is_identify3(str); if(is_gjc(str)) {printf("该字符串为关键词");} else if(i==1) {printf("该字符串为标识符");} else if(j==1) {printf("该字符串为十进制整数");} else if(k==1) {printf("该字符串为运算符");} else if(l==1) {printf("该字符串为分隔符");} else {printf("什么都不是");} return 0; } |
|
分三类即可
1.字符串2.控制字符(包括运算符)3.数值 |
|
10分 |
构造DFA啊..
|
10分 |
参考TCC源代码。
|
20分 |
http://blog.csdn.net/u013298384/article/details/45675019
|