📄 词法分析器2.cpp
字号:
#include "stdio.h"
#include "string.h"
bool IsLetter(char a)
{ if(a>=65&&a<=90) return true;
if(a>=97&&a<=122) return true;
return false;
}
bool IsDigit(char a)
{ if(a>=48&&a<=57) return true;
else return false;
}
int Reserve(char* str)
{
int i,j,len;
char re[5][5]={{"DIM"},{"IF"},{"DO"},{"STOP"},{"END"}};
for(i=0;i<5;i++)
{ len=strlen(re[i]);
for(j=0;j<len;j++)
if(re[i][j]!=str[j]) break;
if(j==len) break;
}
if(i==5) return 6;
else return i+1;
}
void main()
{ int i=-1,j,code=0,slen=-1;
char str[30],ch,strToken[10]=" ";
printf("请输入要做词法分析的字符串:\n");
do
{ i++;
scanf("%c",&str[i]);
slen++;
}while(str[i]!=10);
i=0;
printf("其种别编码为:\n");
ch=str[0];
while(i<slen)
{ while(str[i]==' ') i++;
ch=str[i];
j=0;
if(IsLetter(ch))
{ do
{ strToken[j]=ch;
j++; i++;
ch=str[i];
}while(IsLetter(ch)||IsDigit(ch));
code=Reserve(strToken);
}
else if(IsDigit(ch))
{ do
{ strToken[j]=ch;
j++; i++;
ch=str[i];
}while(IsDigit(ch));
code=7;
}
else if(ch=='*')
{ i++; ch=str[i];
if(ch=='*')
{ code=11;
i++; ch=str[i];
}
else code=10;
}
else
{ switch (ch)
{ case '=': code=8; break;
case '+': code=9; break;
case ',': code=12; break;
case '(': code=13; break;
case ')': code=14; break;
default: code=0;
}
i++; ch=str[i];
}
if(code==0)
{ printf("Error!\n");
break;
}
else printf("%d ",code);
}
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -