编译原理词法分析器C源代码.txt
- 文档编号:1707031
- 上传时间:2022-10-23
- 格式:TXT
- 页数:9
- 大小:8.40KB
编译原理词法分析器C源代码.txt
《编译原理词法分析器C源代码.txt》由会员分享,可在线阅读,更多相关《编译原理词法分析器C源代码.txt(9页珍藏版)》请在冰豆网上搜索。
#include
#defineMAX500/*��ʶ�������*/
main()
{
FILE*in,*out;
charword[MAX];/*�洢��ʶ��*/
charcp;/*�洢��ǰ�����ַ�*/
inti;
if((in=fopen("in.txt","r"))==NULL)
{
printf("���ܴ��ĵ�in.txt�������Ŀ¼���Ƿ���ڸ��ĵ�\n");
exit(0);
}
else
{
printf("�ɹ����ĵ�in.txt\n");
}
if((out=fopen("out.txt","w"))==NULL)
{
printf("���ܴ��ĵ�out.txt�������Ŀ¼���Ƿ���ڸ��ĵ�\n");
exit(0);
}
else
{
printf("�ɹ����ĵ�out.txt\n");
}
cp=fgetc(in);
while(cp!
=EOF)
{
/*���ĵ�ո��Ʊ�������з�*/
while(cp==''||cp=='\t'||cp=='\n')
{
cp=fgetc(in);
}
/*cp���鸴λ*/
i=0;
/*���ּ��*/
if(cp>='0'&&cp<='9')
{
word[i++]=cp;
cp=fgetc(in);
while(cp>='0'&&cp<='9')
{
word[i++]=cp;
cp=fgetc(in);
}
if(cp==''||cp=='\t'||cp=='\n'||cp=='='||cp=='+'||cp=='-'||cp=='*'||cp=='/'||cp=='>'||cp=='<'||cp=='!
'||cp==';'||cp==':
'||cp==','||cp=='{'||cp=='}'||cp=='['||cp==']'||cp=='('||cp==')')
{
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',28,')');
}
else
{
while(cp!
=''&&cp!
='\t'&&cp!
='\n'&&cp!
='='&&cp!
='+'&&cp!
='-'&&cp!
='*'&&cp!
='/'&&cp!
='>'&&cp!
='<'&&cp!
='!
'&&cp!
=';'&&cp!
=':
'&&cp!
=','&&cp!
='{'&&cp!
='}'&&cp!
='['&&cp!
=']'&&cp!
='('&&cp!
=')')
{
word[i++]=cp;
cp=fgetc(in);
}
word[i]='\0';
fprintf(out,"%s%c%s%c%s\n","error:
",'"',word,'"',"���ǺϷ��ı�ʶ��");
}
continue;
}
/*�ַ������*/
if((cp>='a'&&cp<='z')||(cp>='A'&&cp<='Z')||cp=='_')
{
while((cp>='a'&&cp<='z')||(cp>='0'&&cp<='9')||(cp>='A'&&cp<='Z')||cp=='_')
{
word[i++]=cp;
cp=fgetc(in);
}
if(cp==''||cp=='\t'||cp=='\n'||cp=='='||cp=='+'||cp=='-'||cp=='*'||cp=='/'||cp=='>'||cp=='<'||cp=='!
'||cp==';'||cp==':
'||cp==','||cp=='{'||cp=='}'||cp=='['||cp==']'||cp=='('||cp==')')
{
word[i]='\0';
/*���������ּ��*/
if(strcmp(word,"main")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',1,')');
elseif(strcmp(word,"void")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',2,')');
elseif(strcmp(word,"int")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',3,')');
elseif(strcmp(word,"float")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',4,')');
elseif(strcmp(word,"double")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',5,')');
elseif(strcmp(word,"char")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',6,')');
elseif(strcmp(word,"struct")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',7,')');
elseif(strcmp(word,"const")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',8,')');
elseif(strcmp(word,"extern")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',9,')');
elseif(strcmp(word,"register")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',10,')');
elseif(strcmp(word,"static")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',11,')');
elseif(strcmp(word,"if")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',12,')');
elseif(strcmp(word,"else")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',13,')');
elseif(strcmp(word,"switch")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',14,')');
elseif(strcmp(word,"case")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',15,')');
elseif(strcmp(word,"for")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',16,')');
elseif(strcmp(word,"do")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',17,')');
elseif(strcmp(word,"while")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',18,')');
elseif(strcmp(word,"goto")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',19,')');
elseif(strcmp(word,"continue")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',20,')');
elseif(strcmp(word,"break")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',21,')');
elseif(strcmp(word,"default")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',22,')');
elseif(strcmp(word,"sizeof")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',23,')');
elseif(strcmp(word,"return")==0)
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',24,')');
else
fprintf(out,"�Զ����ʶ��:
%c%c%s%c,%d%c\n",'(','"',word,'"',29,')');
}
/*�Ŵ�����ֻ������ĸ�����֡��»��߹��ɣ�*/
else
{
while(cp!
=''&&cp!
='\t'&&cp!
='\n'&&cp!
='='&&cp!
='+'&&cp!
='-'&&cp!
='*'&&cp!
='/'&&cp!
='>'&&cp!
='<'&&cp!
='!
'&&cp!
=';'&&cp!
=':
'&&cp!
=','&&cp!
='{'&&cp!
='}'&&cp!
='['&&cp!
=']'&&cp!
='('&&cp!
=')')
{
word[i++]=cp;
cp=fgetc(in);
}
word[i]='\0';
fprintf(out,"%s%c%s%c%s\n","error:
",'"',word,'"',"���ǺϷ��ı�ʶ��");
}
continue;
}
/*�����*/
if(cp=='+')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',31,')');
cp=fgetc(in);
continue;
}
if(cp=='-')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',32,')');
cp=fgetc(in);
continue;
}
if(cp=='*')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',33,')');
cp=fgetc(in);
continue;
}
if(cp=='/')
{
word[i++]=cp;
cp=fgetc(in);
if(cp=='*'){word[--i]='\0';while(cp!
='/'){cp=fgetc(in);}cp=fgetc(in);}
else
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',34,')');
word[i]='\0';
continue;
}
if(cp=='=')
{
word[i++]=cp;
cp=fgetc(in);
if(cp=='=')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',39,')');
cp=fgetc(in);
}
else
{
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',27,')');
}
continue;
}
if(cp=='<')
{
word[i++]=cp;
cp=fgetc(in);
if(cp=='=')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',36,')');
cp=fgetc(in);
}
else
{
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',35,')');
}
continue;
}
if(cp=='>')
{
word[i++]=cp;
cp=fgetc(in);
if(cp=='=')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',38,')');
cp=fgetc(in);
}
else
{
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',37,')');
}
continue;
}
if(cp=='!
')
{
word[i++]=cp;
cp=fgetc(in);
if(cp=='=')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',40,')');
cp=fgetc(in);
}
else
{
word[i]='\0';
fprintf(out,"%s%c%s%c%s\n","error:
",'"',word,'"',"���ǺϷ��ı�ʶ��");
}
continue;
}
/*���*/
if(cp==';')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',41,')');
cp=fgetc(in);
continue;
}
if(cp==':
')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',42,')');
cp=fgetc(in);
continue;
}
if(cp==',')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',43,')');
cp=fgetc(in);
continue;
}
if(cp=='{')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',44,')');
cp=fgetc(in);
continue;
}
if(cp=='}')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',45,')');
cp=fgetc(in);
continue;
}
if(cp=='[')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',46,')');
cp=fgetc(in);
continue;
}
if(cp==']')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',47,')');
cp=fgetc(in);
continue;
}
if(cp=='(')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',48,')');
cp=fgetc(in);
continue;
}
if(cp==')')
{
word[i++]=cp;
word[i]='\0';
fprintf(out,"%c%c%s%c,%d%c\n",'(','"',word,'"',49,')');
cp=fgetc(in);
continue;
}
/*����ʶ����ַ�*/
word[i++]=cp;
cp=fgetc(in);
word[i]='\0';
fprintf(out,"%s%c%s%c%s\n","error:
",'"',word,'"',"���ǺϷ��ı�ʶ��");
}
fclose(in);
fclose(out);
printf("�ɹ���in.txt�ĵ��ڴ�����дʷ��������������������out.txt�ĵ���\n");
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析器 源代码