📄 wang词法分析.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int flag=0;
char cch;
char bchar;
char str[100];
FILE *fp;
void Pushback(char c)
{
bchar=c;
flag=1;
}
char GetC( )
{ char t;
if(flag==1)
{
flag=0;
return bchar;
}
t=fgetc(fp);
if(t=='\n'||t=='\t'||t=='\r')
t=' ';
return t;
}
int SearchKey( )
{ int i;
char StrToken[33][10]={"?","printf","break","case","char","area",
"continue","default","do","double","else","enum","extern",
"float","for","goto","if","int","long","register","return",
"short","signed","sizeof","static","struct","switch",
"typedef","union","unsigned","void","volatile","while"};
for(i=1;i<33;i++)
{
if(strcmp(StrToken[i],str)==0)
return i;
}
return 0;
}
void GetNextWord( )
{
int k;
cch=GetC();
while(cch==' ')
{
cch=GetC( );
}
k=0;
str[0]=cch;
if((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z'))
{
cch=GetC( );
str[++k]=cch;
while((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z')||
(cch>='0'&&cch<='9'))
{
str[k++]=cch;
cch=GetC( );
}
str[k]='\0';
Pushback(cch);
if(SearchKey( )==0)
printf("1 %s,",str);
else printf("2 %s ,",str);
}
else if(cch<='9'&&cch>='0')
{
while(cch<='9'&&cch>='0')
cch=GetC( );
if(cch=='E'||cch=='D')
cch=GetC( );
if(cch=='+'||cch=='-')
{ cch=GetC( );
if(cch<='9'&&cch>='0')
cch=GetC( );
while(cch<='9'&&cch>='0')
cch=GetC( );
Pushback(cch);
printf("400, ");
}
else if(cch<='9'&&cch>='0')
{
while(cch<='9'&&cch>='0')
cch=GetC( );
Pushback(cch);
printf("400, ");
}
else if(cch=='.')
{
while(cch<='9'&&cch>='0')
cch=GetC( );
if(cch=='E'||cch=='D')
cch=GetC( );
if(cch=='+'||cch=='-')
{
cch=GetC( );
if(cch<='9'&&cch>='0')
cch=GetC( );
while(cch<='9'&&cch>='0')
cch=GetC( );
Pushback(cch);
printf("400, ");
}
else if(cch<='9'&&cch>='0')
{
while(cch<='9'&&cch>='0')
cch=GetC( );
Pushback(cch);
printf("400, ");
}
else Pushback(cch);
printf("400, ");
}
}
else
{
switch(cch)
{
case '+':{cch=GetC( );
switch(cch)
{case '+':printf("4 ++, ");break;
case '-':printf("4 +=, ");break;
default:Pushback(cch);
printf("4 +, ");break;
}
};break;
case '-':{cch=GetC( );
switch(cch)
{case '-':printf("4 --, ");break;
case '=':printf("4 -=, ");break;
case '>':printf("4 ->, ");break;
default:Pushback(cch);
printf("4 -, ");
};break;
}
case '*':{cch=GetC( );
if(cch=='=') printf("4 *=, ");
else {
Pushback(cch);
printf("4 *, ");
}
};break;
case '/':{cch=GetC( );
if(cch=='=') printf("4 =, ");
else {
Pushback(cch);
printf("4 /, ");
}
};break;
case '<':{cch=GetC( );
switch(cch)
{
case'=':printf("4 <=, ");break;
case'<':cch=GetC( );
if(cch=='=')printf("4 <<=, ");
else {
Pushback(cch);
printf("4 <<, ");
};
default:Pushback(cch);
printf("4 <, ");
}
};break;
case '>':{cch=GetC( );
switch(cch)
{
case'=':printf("4 >=, ");break;
case'>':cch=GetC( );
if(cch=='=')printf("4 >>=, ");
else {
Pushback(cch);
printf("4 >>, ");break;}
default:Pushback(cch);
printf("4 >, ");
}
};break;
case '=':{cch=GetC( );
if(cch=='=') printf("4 ==, ");
else {
Pushback(cch);
printf("4 =, ");
}
};break;
case '%':{cch=GetC( );
if(cch=='=') printf("4 %=, ");
else {
Pushback(cch);
printf("4 %, ");
}
};break;
case '!':{cch=GetC( );
if(cch=='=') printf("4 !=, ");
else {
Pushback(cch);
printf("4 !, ");
}
};break;
case '&':{cch=GetC( );
switch(cch)
{
case '&':printf("4 &&, ");break;
case '=':printf("4 &=, ");break;
default:Pushback(cch);
printf("4 &, ");
}
};break;
case '^':cch=GetC( );
if(cch=='=')printf("4 ^=, ");
else{Pushback(cch);
printf("4 ^, ");
};break;
case '|':cch=GetC( );
switch(cch)
{
case'|':printf("4 ||, ");break;
case'=':printf("4 |=");break;
default:Pushback(cch);
printf("4 |, ");
};break;
case '(':printf("4 (, ");break;
case ')':printf("4 ), ");break;
case '[':printf("4 [, ");break;
case ']':printf("4 ], ");break;
case '{':printf("4 {, ");break;
case '}':printf("4 }, ");break;
case '~':printf("4 ~, ");break;
case '.':printf("4 ., ");break;
case ';':printf("4 ;, ");break;
case ',':printf("4 ,, ");break;
case '?':{cch=GetC( );
if(cch==':')printf("4 ?:, ");
else printf("error!\n");
}break;
}
}
}
void main()
{
if((fp=fopen("c:\\windows\\desktop\\wangs.txt","r"))==0)
printf("Please Change Your TXT Flies Position...\nAnd Make Sure the TXT Flie's Name is wangs.txt\nGood Luck! ^_^ \n");
else
{ while(cch!=EOF)
{
GetNextWord( );
printf(" ");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -