資源簡介
通過C語言編寫一個詞法分析器完成輸入是字符串(或源程序文本文件),輸出是源程序中各單詞的字符串、起止位置、詞的類別。附帶實驗報告。

代碼片段和文件信息
#include???
#include???
??
char?prog[80]token[8]ch;??
int?synpmnsum;??
char?*rwtab[6]={“main““if““else““int““return““void“};??
???
void?scaner(void);??
??
main()??
{??
????p=0;??
????printf(“\n?please?input?a?string(end?with?‘#‘):\n“);??
??????
????do{??
????????????scanf(“%c“&ch);??
????????????prog[p++]=ch;??
????}while(ch!=‘#‘);??
??????
????p=0;??
????do{??
????????????scaner();??
????????????switch(syn)??
????????????{??
????????????????case?11:??
????????????????????printf(“(?%-10d%5d?)\n“sumsyn);??
????????????????break;??
??????????????????
????????????????case?-1:??
????????????????????printf(“you?have?input?a?wrong?string\n“);??
????????????????????//getch();??
????????????????????return?0;??
????????????????break;??
??????????????????
????????????????default:???
????????????????printf(“(?%-10s%5d?)\n“tokensyn);??
????????????????break;??
????????????}??
????????}while(syn!=0);??
????//getch();??
?}??
??
void?scaner(void)??
{????
????sum=0;??
??????
????for(m=0;m<8;m++)??
????????token[m++]=?NULL;??
??????
????????ch=prog[p++];??
????????m=0;??
??????????
????while((ch==‘?‘)||(ch==‘\n‘))??
????????ch=prog[p++];??
??????
????if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))??
?????{???
????????while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))??
????????{??
????????????token[m++]=ch;??
????????????ch=prog[p++];??
????????}??
??????????
????????p--;??
????????syn=10;??
??
????????for(n=0;n<7;n++)??
????????if(strcmp(tokenrwtab[n])==0)??
????????{???
????????????syn=n+1;??
????????????break;??
????????}??
?????}??
?????else?if((ch>=‘0‘)&&(ch<=‘9‘))??
?????{???
????????while((ch>=‘0‘)&&(ch<=‘9‘))??
????????{??
????????????sum=sum*10+ch-‘0‘;??
????????????ch=prog[p++];??
????????}??
????????p--;??
????????syn=11;??
????}??
????else???
????{??
????????switch(ch)??
????????{??
????????case?‘<‘:??
????????????token[m++]=ch;??
????????????ch=prog[p++];??
????????????if(ch==‘=‘)??
????????????{???
????????????????syn=20;??
????????????????token[m++]=ch;??
????????????}??
????????????else??
????????????{????
????????????????syn=18;??
????????????????p--;??
????????????}??
????????break;??
??
????????case?‘>‘:??
????????????token[m++]=ch;??
????????????ch=prog[p++];??
????????????if(ch==‘=‘)??
????????????{??
????????????????syn=22;??
????????????????token[m++]=ch;??
????????????}??
????????????else??
????????????{???
????????????????syn=21;??
????????????????p--;??
????????????}??
????????break;??
??
????????case?‘+‘:??
????????????token[m++]=ch;??
????????????ch=prog[p++];??
????????????if(ch==‘+‘)??
????????????{??
????????????????syn=34;??
????????????????token[m++]=ch;??
????????????}??
????????????else??
????????????{??
????????????????syn=14;??
????????????????p--;??
????????????}??
????????break;??
??
????????case?‘-‘:??
????????????token[m++]=ch;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-04-17?16:11??詞法分析\
?????文件????????5179??2017-04-17?16:10??詞法分析\具體代碼.c
?????文件???????80896??2017-04-17?16:11??詞法分析\詞法分析實訓報告.doc
評論
共有 條評論