- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#includestdio.h
#includestring.h
#includestdlib.h
void init();
void getsym();
enum symbol {nul,ident,number,plus,minus,times,slash,oddsym,eql,neq, beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,
constsym,varsym,procsym,programsym,
};
#define norw 14
#define al 10
#define nmax 10
char word [norw][al];
char ch;
enum symbol sym;
enum symbol wsym[norw];
enum symbol ssym[256];
FILE *fin,*fout;
void main(){printf(please input outfiles name:
\n);// 词法分析之后的结果要输出到的文件 }char outname[30],inname[30];
scanf(%s,outname);
1 / 8
if((fout=fopen(outname,w))==NULL){printf(cannot open output file!);
exit
(0);}printf(please input infiles name:
\n);// 需要词法分析的源程序
scanf(%s,inname);
if((fin=fopen(inname,r))==NULL){printf(cannot open file!\n);
exit
(0);}ch=fgetc(fin);
while(ch!=EOF){}getsym();
读取源文件
void getsym(){long m;
char id[al+1],a[al+1];
int i,k;
init();
if(ch== ||ch==10||ch==9){}
else {if(ch=ach=z||ch=Ach=Z){k=0;
ch=fgetc(fin);
do {if(kal){a[k]=ch;
k++;}ch=fgetc(fin);
}while
((ch=ach=z||ch=0ch=9)||(ch=Ach=Z||ch=0ch=9)
);
2 / 8
a[k]=0;
strcpy(id,a);
for(i=0;inorw;i++){if(strcmp(id,word[i])==0){sym=wsym[i];
printf(%s %ssym\n,id,id);
fprintf(fout,%s %ssym\n,id,id);
break;}else {if(i==(norw-1)){sym=ident;
printf(%s ident\n,id);
fprintf(fout,%s ident\n,id);
}}}}
else {if(ch=0ch=9){k=0;
m=0;
sym=number;
do
}{
m=10*m+ch-0;
k++;
ch=getc(fin);
}while(ch=0ch=9);
if(k=nmax){printf(error! 数值太大! \n);
//exit
(0);}printf(%d number\n,m);
3 / 8
fprintf(fout,%d number\n,m);
else {if(ch==:
){ch=getc(fin);
printf(:
fprintf(fout,:
ch=fgetc(fin);}else {}sym=nul;
fprintf(fout,:
nul\n);
printf(:
nul\n);
else {if(ch==){ch=fgetc(fin);
if(ch===){sym=leq;
printf(=lep\n);
fprintf(fout,=
ch=fgetc(fin);}else {sym=lss;
printf(
fprintf(fout,}}
else {if(ch==){ch=fgetc(fin);
if(ch===){sym=geq;
printf(=
fprintf(fout,=
4 / 8
ch=fgetc(fin);}else {sym=gtr;
printf(
fprintf(fout,}}
else {sym=ssym[ch];
if(ch==+){printf(+
plus\n);ch=fgetc(fin);}
else lep\n);
lss\n);
lss\n);
geq\n);
geq\n);
gtr\n);
gt
您可能关注的文档
最近下载
- DB32/T 5132.2-2025 重点人群职业健康保护行动指南 第2部分:消防救援人员.pdf
- 工贸企业重大事故隐患判定标准解读培训课件.pptx VIP
- DB3707_T073—2022_玉米雄性不育三系配套制种技术规程_潍坊市 .docx VIP
- 国家基层糖尿病防治管理指南(2025)解读.pptx
- 药品共线生产质量管理指南(征求意见稿).docx VIP
- PC和ABS塑料合金市场洞察报告.pptx VIP
- 《跟单信用证统一惯例》UCP600中文版.doc VIP
- 跟单信用证统一惯例第600号出版物(UCP600).pdf VIP
- 国家储备林建设项目监理单位工程质量评估报告.docx VIP
- 大学安全离校主题班会.doc VIP
原创力文档


文档评论(0)