📄 cpp1.cpp
字号:
#include "stdio.h"
#include "string.h"
char labs[25]={
'+','-','*','/','_',
'<','>','.',',','=',
'\n','&','(',')','%',
'!','{','}','[',']',
':',';','"','\\',' '}; // +-*/_<>,.=%&()?!{}[]:;\" .....
char labi[20][10]={
"int","float","for","if","void","return","printf",
"main","continue","char","getchar"
}; //定义保留字
char userr[50][20];
//*********************************************************************
int isd(char ch) //检测char是不是数字
{
if((ch-'0'>=0) && (ch-'9'<=0))
return 1;
else
return 0;
}
int isint(char *str)
{
int i=0;
if(str[i]=='0')
{
return 0;
}
else
{
for(i=0;str[i]!='\0';i++)
if(!isd(str[i]))
return 0;
return 1;
}
}
int isss(char ch) //检测是不是特殊字符labs[]
{
int i;
for(i=0;i<25;i++)
if(labs[i]==ch)
return 1;
return 0;
}
int isblz(char *str) //检查是不是保留字
{
int i;
for(i=0;i<20;i++)
if(!strcmp(labi[i],str))
return 1;
return 0;
}
int isl(char ch) //检测是不是字母
{
if(((ch-'a'>=0) && (ch-'z'<=0))||((ch-'A'>=0) && (ch-'Z'<=0)))
return 1;
else
return 0;
}
int isid(char *str)
{
int i=0;
if(isl(str[0]))
{
i++;
while(isl(str[i])||isd(str[i]))
{
i++;
}
if(isl(str[i])||isd(str[i]))
return 0;
return 1;
}
return 0;
}
//*********************************************************************
void clear(char *temp)
{
int i;
for(i=0;i<20;i++)
temp[i]='\0';
}
//**********************************************************************
void lxxx(char *str) //词法分析函数
{
int i=0,k=0,j=0;int n;
int m=0;
for(i=0;i<50;i++)
if (userr[i][0]!='\0') j++;
char temp[20];
clear(temp);
for(i=0;i<20;i++)
{
if(!isss(str[i]))
temp[k++]=str[i];
if(isss(str[i]))
{
if(!temp[0]=='\0')
{
for(n=0;n<10;n++)
userr[j][n]=temp[n];
clear(temp);
k=0;
j++;
}
if (isss(str[i])&&(str[i]!=' '))
{
userr[j][0]=str[i];
j++;
}
}
}
}
//*************************************************************
void test()
{
int val=0;
char c;
c=getchar();
while (c!='\n')
{
while(isd(c))
{
val=val *10 + c - '0';
c=getchar();
}
while(isl(c))
{
c=getchar();
}
getchar();
}
printf("\n\n%d",val); //这里确实是数字,而且是一个无符号的整数。
char iio;int i;
printf("\n\nInput a letter:\n");
iio=getchar();
if (isl(iio))
printf("\n\nThat is a letter.!");
else
printf("\n\nNot a letter.!");
printf("\n\nInput a char:\n");
getchar();
iio=getchar();
for (i=0;i<25;i++)
{
if (isss(iio))
{
printf("\nThis is a specific symbol!!!");break;
}
}
}
void print(char strss[50][20])
{
int i,j;
for(j=0;j<50;j++)
{
i=0;
while(strss[j][i]!='\0')
{
if(strss[j][i]!='\0')
printf("%c",strss[j][i]);
else
continue;
i++;
}
if(strss[j][0]!='\0')
{
if(isblz(strss[j]))
{
printf("\t\t\t保留字");
}
else if(isss(strss[j][0]))
{
printf("\t\t\t符号");
}
else if(isint(strss[j])) //这里要有改动
{
printf("\t\t\t数字");
}
else if(isid(strss[j]))
{
printf("\t\t\tid");
}
else printf("\t\t\t????");
printf("\n");
}
}
}
void initialize(char userr[][20])
{
int i,j;
for(j=0;j<50;j++)
for(i=0;i<20;i++)
userr[j][i]='\0';
}
int main()
{
int i,j;
for(j=0;j<50;j++)
for(i=0;i<20;i++)
userr[j][i]='\0';
char text[20]; //临时的小空间
clear(text);
//char buffer[50][20];
i=0;
FILE *fp;
char ch;
if((fp=fopen("inst.txt","r"))==NULL)
printf("Can't open file!!\n");
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch!='\n')
text[i]=ch;
i++;
if(ch=='\n')
{
lxxx(text);
clear(text);
i=0;
}
ch=fgetc(fp);
}
print(userr);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -