📄 x.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <process.h>
#define MAX 50
void main()
{
FILE *intxt,*outtxt; //存放输入字符串和输出单词串的文件
char a[MAX]; //a数组存放单词符号
char dchar; //dchar存放当前输入字符
int i=0; //a数组的一个指针
//以读方式打开输入文件
if((intxt=fopen("输入.txt","r"))==NULL)
{
printf("can not open file\n");
exit(0);
}
//以写方式打开输出文件
if((outtxt=fopen("输出.txt","w"))==NULL)
{
printf("cannout open out\n");
exit(1);
}
//去掉开头空格
dchar=fgetc(intxt);
while(dchar==' ')
{
dchar=fgetc(intxt);
}
int ch;
while(dchar!='#') //以#符号结束
{
//常数部分判断
if((dchar>='a'&&dchar<='z')||(dchar>='A'&&dchar<='Z')||(dchar>='0'&&dchar<='9')||dchar=='('||dchar==')'||dchar=='{'||dchar=='}'||dchar=='>'||dchar=='<'||dchar==';'||dchar==':'||dchar=='+'||dchar=='-'||dchar=='*'||dchar=='/'||dchar=='='||dchar=='!='||dchar=='>='||(ch=dchar)=='<='||dchar==','||dchar=='['||dchar==']')
{
i=0;//清空a字符数组
if(dchar>='0'&&dchar<='9')
{
a[i++]=dchar;
dchar=fgetc(intxt);//再读入下一个字符
while(dchar>='0'&&dchar<='9')
{
a[i++]=dchar;
dchar=fgetc(intxt);
}
if(dchar!='.')//如果当前读入的符号不为小数点,则常数读完毕,输出此常数
{
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",29,'"',a,'"',")");//格式化输出到目标文件,29代表种别码, arr为内码值,规定用数字本身代表
}
else//当前字符为小数点则继续向下读入
{
a[i++]=dchar;
dchar=fgetc(intxt);
while(dchar>='0'&&dchar<='9')
{
a[i++]=dchar;
dchar=fgetc(intxt);
}
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",29,'"',a,'"',")");
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
}
//判断标识符和关键字部分
if((dchar>='a'&&dchar<='z')||(dchar>='A'&&dchar<='Z'))
{
i=0;//清空a字符数组
while((dchar>='a'&&dchar<='z')||(dchar>='0'&&dchar<='9')||(dchar>='A'&&dchar<='Z'))
{
a[i++]=dchar;
dchar=fgetc(intxt);
}
//把字符数组a和关键字表比较,判断单词串是关键字还是标识符
a[i++]='\0';
if(strcmp(a,"main")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",1,'"',a,'"',")");
else if(strcmp(a,"if")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",2,'"',a,'"',")");
else if(strcmp(a,"else")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",3,'"',a,'"',")");
else if(strcmp(a,"int")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",4,'"',a,'"',")");
else if(strcmp(a,"return")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",5,'"',a,'"',")");
else if(strcmp(a,"void")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",6,'"',a,'"',")");
else if(strcmp(a,"while")==0)
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",7,'"',a,'"',")");
else
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",28,'"',a,'"',")");
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
//判断标识符 包括:= + - * / < <= > >= ==,!= ; : , { } [ ] ( )
if(dchar=='+')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",9,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='-')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",10,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='*')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",11,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='/')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",12,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='=')
{
i=0;
a[i++]=dchar;
dchar=fgetc(intxt);
if(dchar=='=')
{
a[i++]=dchar;
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",17,'"',a,'"',")");
dchar=fgetc(intxt);
}
else
{ a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",8,'"',a,'"',")");
}
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='<')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",13,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='>')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",15,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='{')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",22,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='}')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",23,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='[')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",24,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar==']')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",25,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='(')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",26,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar==')')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",27,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar==':')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",20,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar==';')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",19,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar==',')
{
fprintf(outtxt,"%s%d,%c%c%c%s\n","(",21,'"',dchar,'"',")");
dchar=fgetc(intxt);
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='>')
{
i=0;
a[i++]=dchar;
dchar=fgetc(intxt);
if(dchar=='=')
{
a[i++]=dchar;
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",16,'"',a,'"',")");
dchar=fgetc(intxt);
}
else
{ a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",15,'"',a,'"',")");
}
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='<')
{
i=0;
a[i++]=dchar;
dchar=fgetc(intxt);
if(dchar=='=')
{
a[i++]=dchar;
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",14,'"',a,'"',")");
dchar=fgetc(intxt);
}
else
{ a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",13,'"',a,'"',")");
}
}
while(dchar==' ')
{
dchar=fgetc(intxt);
}
if(dchar=='!')
{
i=0;
a[i++]=dchar;
dchar=fgetc(intxt);
if(dchar=='=')
{
a[i++]=dchar;
a[i++]='\0';
fprintf(outtxt,"%s%d,%c%s%c%s\n","(",18,'"',a,'"',")");
dchar=fgetc(intxt);
}
}
}//结束开头while语句
}
printf("请在 输入.txt文件中输入,并且以#结束输入,在输出.txt文件中查看词法分析结果\n");
fclose(intxt);//关闭文件退出
fclose(outtxt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -