資源簡介
是基于c++環境的詞法分析器,C MINUS ,程序要求輸入一個文件,再以文件的方式輸出結果。

代碼片段和文件信息
#include
#include
#include
#define?MAX_NAME?30
#define?MAX_FILE?10000
enum?member?{elsesymifsymreturnsymintsymvoidsymwhilesymident
numberplusminustimesrnotelnoteslashgeqleqlssgrteqlbecomes
uneqlsemicolonlparentrparentlbracerbracelbracketrbracketcomma};
struct?word{
member?character;
char?name[MAX_NAME];
};
void?write(FILE*?ofpchar*?name){
int?i=0;
int?len=strlen(name);
for(i=0;i ????fputc(putc(*(name+i)ofp)stdout);
}
}
void?analyze(char*?sFILE*?fpword*?ssym){
FILE*?ofp;
char?ch;
char?filename[]=“wordstring.txt“;
int?count=0i=0k=0j=0;
if((ofp=fopen(filename“w“))==NULL){
printf(“cannot?open?file\n“);
exit(0);
}
while(!feof(fp)){
ch=fgetc(fp);
if(k>=MAX_FILE){
printf(“file?is?too?long\n“);
exit(0);
}
????
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘){
????*(s+count)=ch;
????? count++;
*(s+count)=‘\0‘;
ch=fgetc(fp);
if(!(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)){
write(ofps);
????????????????strcpy(ssym[k].names);
if(!strcmp(s“else“)){
????????????????????write(ofp“ elsesym\n“);
????????????????????ssym[k].character=elsesym;
k++;
}
else?if(!strcmp(s“if“)){
???????????????????write(ofp“ ifsym\n“);
???ssym[k].character=ifsym;
???k++;
}
else?if(!strcmp(s“int“)){
????????????????????write(ofp“ intsym\n“);
ssym[k].character=intsym;
k++;
}
else?if(!strcmp(s“return“)){
????????????????????write(ofp“ returnsym\n“);
ssym[k].character=returnsym;
k++;
}
else?if(!strcmp(s“void“)){
????????????????????write(ofp“ voidsym\n“);
ssym[k].character=voidsym;
k++;
}
else?if(!strcmp(s“while“)){
????????????????????write(ofp“ whilesym\n“);
ssym[k].character=whilesym;
k++;
}
else{
????????????????????write(ofp“ ident\n“);
ssym[k].character=ident;
k++;
}
count=0;
}
fseek(fp-sizeof(char)1);
ch=NULL;
}
if(ch>=‘0‘&&ch<=‘9‘){
*(s+count)=ch;
????? count++;
*(s+count)=‘\0‘;
ch=fgetc(fp);
if(!(ch>=‘0‘&&ch<=‘9‘)){
write(ofps);
????????????????strcpy(ssym[k].names);
write(ofp“ number\n“);
ssym[k].character=number;
k++;
????count=0;
}
fseek(fp-sizeof(char)1);
ch=NULL;
}
if(ch==‘+‘){
write(ofp“ plus\n“);
????????????ssym[k].character=plus;
k++;
}
if(ch==‘-‘){
write(ofp“ minus\n“);
ssym[k].character=minus;
k++;
}
if(ch==‘/‘){
ch=fgetc(fp);
???? if(ch==‘*‘){
???????????????write(ofp“ lnote\n“);
???ssym[k].character=lnote;
???k++;
}
else{
write(ofp“ slash\n“);
ssym[k].character=slash;
k++;
fseek(fp-sizeof(char)1);
}
ch=NULL;
}
if(ch==‘<‘){
ch=fgetc(fp);
if(ch==‘=‘){
????????????????write(ofp“ leq\n“);
ssym[k].character=leq;
k++;
}
e
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????722??2011-05-19?21:30??wordstring.txt
?????目錄???????????0??2011-05-19?14:02??Debug\
?????文件??????184383??2011-05-19?14:02??Debug\1.exe
?????文件??????197432??2011-05-19?14:02??Debug\1.ilk
?????文件???????14715??2011-05-19?14:02??Debug\1.obj
?????文件??????226520??2011-05-19?13:56??Debug\1.pch
?????文件??????467968??2011-05-19?14:02??Debug\1.pdb
?????文件??????184373??2011-05-15?08:08??Debug\cifafenxiqi.exe
?????文件??????194332??2011-05-15?08:08??Debug\cifafenxiqi.ilk
?????文件??????222424??2011-05-14?11:53??Debug\cifafenxiqi.pch
?????文件??????484352??2011-05-15?08:08??Debug\cifafenxiqi.pdb
?????文件???????41984??2011-05-19?21:30??Debug\vc60.idb
?????文件???????53248??2011-05-19?14:02??Debug\vc60.pdb
?????文件????????4833??2011-05-19?14:02??1.cpp
?????文件????????3341??2011-05-19?21:29??1.dsp
?????文件?????????510??2011-05-19?21:32??1.dsw
?????文件???????41984??2011-05-19?21:32??1.ncb
?????文件???????48640??2011-05-19?21:32??1.opt
?????文件?????????236??2011-05-19?21:29??1.plg
?????文件????????4334??2011-05-13?23:48??cifafenxiqi.dsp
?????文件?????????528??2011-05-13?20:37??cifafenxiqi.dsw
?????文件???????41984??2011-05-17?13:17??cifafenxiqi.ncb
?????文件???????48640??2011-05-17?13:17??cifafenxiqi.opt
?????文件?????????256??2011-05-17?13:17??cifafenxiqi.plg
?????文件?????????214??2011-05-19?14:22??in
?????文件?????????131??2011-05-19?14:02??input
?????文件???????????0??2011-05-18?13:12??output
- 上一篇:C89文法描述PDF
- 下一篇:俄羅斯方塊-畢業設計開題報告
評論
共有 條評論