資源簡(jiǎn)介
華南農(nóng)業(yè)大學(xué) 編譯原理 綜合性實(shí)驗(yàn)報(bào)告 選擇部分C語(yǔ)言的語(yǔ)法成分,設(shè)計(jì)其詞法分析程序、語(yǔ)法語(yǔ)義分析程序。

代碼片段和文件信息
#include?
#include?
#include???
#define?BUFFSIZE?5000
char?prog[BUFFSIZE]token[8];
char?chch1;
int?synpqmnsumi=1k=0kkflag=0;
char?*rwtab[32]={“main““break““case““char““define““continue““default“
?????????????????“do““double““else““what““extern““float““for““goto““if“
?????????????????“int““l(fā)ong““stack““return““short““fopen““sizeof“
?“static““struct““switch““typedef““enum““unsigned““void““fclose““while“};
int?main()??/*主函數(shù)*/
{
??void?scaner();
??int?lrparser();
??FILE?*fp;
??if((fp=fopen(“test.txt““r“))==NULL)
????{?printf(“無(wú)法打開(kāi)文件!\n“);
??????exit(1);
????}
??p=0;
??while(!feof(fp))
????{??prog[p++]=fgetc(fp);
???????if(p>=5000)
???????{??printf(“緩沖區(qū)容量不夠!\n“);
??????????exit(1);
???????????}
????}/*把文件test中的內(nèi)容存入數(shù)組prog中*/
??fclose(fp);
??printf(“%s\n“prog);
??p=0;
printf(“輸出詞法分析結(jié)果:\n“);
do
{
scaner();
switch(syn)
{
case?34:printf(“(%d%d)“synsum);break;
case?-1:printf(“error“);break;
default:printf(“(%d%s)“syntoken);
}
}while(syn!=0);
p=0;
printf(“\n語(yǔ)法語(yǔ)義的分析開(kāi)始:\n“);
??scaner();
??lrparser();?
??system(“pause“);?
??return?0;?
}
void?scaner()
{?
??for(n=0;n<8;n++)?token[n]=NULL;
??m=0;
??sum=0;
??ch=prog[p];
??while(ch==‘?‘||ch==‘\n‘)
??{?p++;
????ch=prog[p];
??????}/*讀下一個(gè)字符*/
??if((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a(chǎn)‘&&ch<=‘z‘))
??{?while((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a(chǎn)‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))
????{?token[m]=ch;
??????m++;p++;
??????ch=prog[p];
????????}
??token[m++]=‘\0‘;
??syn=33;
??for(n=0;n<32;n++)
?????if(strcmp(tokenrwtab[n])==0)
?????{?syn=n+1;
???????break;
?????????}
??}/*判斷輸入字符是否為標(biāo)識(shí)符或者關(guān)鍵字的情況*/
??else
??????if(ch>=‘0‘&&ch<=‘9‘)
??????{?while(ch>=‘0‘&&ch<=‘9‘)
????????{?sum=sum*10+ch-‘0‘;
??????????p++;
??????????ch=prog[p];
????????????}
????????syn=34;
????}/*判斷輸入字符是否為整型常數(shù)的情況*/
??else
??????switch(ch)
??????{
???????case?‘<‘:token[m]=ch;
????????????????p++;
????????????????ch=prog[p];
????????????????if(ch==‘>‘)
????????????????{?syn=42;
??????????????????m++;
??????????????????token[m]=ch;
??????????????????p++;
????????????????}/*出現(xiàn)<>的情況*/
????????????????else?if(ch==‘=‘)
????????????????{?syn=43;
??????????????????m++;
??????????????????token[m]=ch;
??????????????????p++;
????????????????}/*出現(xiàn)<=的情況*/
????????????????else
????????????????{?syn=41;}
????????????????break;
???????case?‘>‘:token[m]=ch;
????????????????p++;
????????????????ch=prog[p];
????????????????if(ch==‘=‘)
????????????????{?syn=45;
??????????????????m++;
??????????????????token[m]=ch;
??????????????????p++;
????????????????}/*出現(xiàn)>=的情況*/
????????????????else
????????????????{syn=44;}
????????????????break;
???????case?‘:‘:token[m]=ch;
????????????????p++;
????????????????ch=prog[p];
????????????????if(ch==‘=‘)
????????????????{?syn=40;
??????????????????m++;
??????????????????token[m]=ch;
??????????????????p++;
????????????????}/*出現(xiàn):=的
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件?????????60??2012-12-03?13:05??201031000121??伍偉勁\right-test.txt
?????文件?????????60??2012-12-03?13:51??201031000121??伍偉勁\test.txt
?????文件?????????59??2012-12-03?13:18??201031000121??伍偉勁\wrong-test.txt
?????文件????????277??2012-12-03?13:31??201031000121??伍偉勁\程序運(yùn)行說(shuō)明.txt
?????文件???????7661??2012-12-03?13:33??201031000121??伍偉勁\編譯原理.cpp
?????文件?????257536??2012-12-03?13:44??201031000121??伍偉勁\編譯原理—伍偉勁.doc
?????目錄??????????0??2012-12-03?13:51??201031000121??伍偉勁
-----------?---------??----------?-----??----
???????????????265653????????????????????7
評(píng)論
共有 條評(píng)論