📄 main.c
字号:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char * rwtab[6] = {"begin","if","then","while","do","end"};
char prog[80] = "-12+23=12";
char token[10] = "begin" ;
char ch;
int pi,ti; //pi是prog的指针,ti是token的指针
int syn,sum;
void getch()
{
ch = prog[pi];
pi++;
}
void getbc()
{
while(ch == ' ' && ch != '\0')
getch();
}
void concat()
{
token[ti] = ch;
ti++;
}
int letter()
{
return isalpha(ch);
}
int digit()
{
return isdigit(ch);
}
void retract()
{
pi--;
}
int reserve()
{
int i;
for(i = 0 ; i < 6 ; i++)
{
if(!strcmp(rwtab[i],token))
return i + 1;
}
return 10 ;
}
void inital()
{
int i ;
for( i = 0 ; i < 10 ; i++ )
token[i] = '\0' ;
sum = 0 ;
ti = 0 ;
}
void scaner()
{
getch() ;
getbc() ;
inital() ;
if(letter())
{
while( letter() || digit() )
{
token[ti++] = ch ;
getch();
}
retract();
syn = reserve();
}
else if(digit())
{
if( digit() )
{
while( digit() )
{
sum = sum * 10 + ch - '0' ;
getch();
}
retract();
syn = 11 ;
}
}
else
switch( ch )
{
case '<' : token[ti++] = ch ;
getch() ;
if( ch == '>' )
{
syn = 21 ;
token[ti++] = ch ;
}
else if( ch == '=' )
{
syn = 22 ;
token[ti++] = ch ;
}
else
{
syn = 20 ;
retract() ;
}
break ;
case '>' : token[ti++] = ch ;
getch() ;
if( ch == '=' )
{
syn = 24 ;
token[ti++] = ch ;
}
else
{
syn = 23 ;
retract() ;
}
break ;
case ':' : token[ti++] = ch ;
getch() ;
if( ch == '=' )
{
syn = 18 ;
token[ti++] = ch ;
}
else
{
syn = 17 ;
token[ti++] = ch ;
}
break ;
case '+' : syn = 13 ; token[0] = ch ; break;
case '-' : syn = 14 ; token[0] = ch ; break;
case '*' : syn = 15 ; token[0] = ch ; break;
case '/' : syn = 16 ; token[0] = ch ; break;
case '=' : syn = 25 ; token[0] = ch ; break;
case ';' : syn = 26 ; token[0] = ch ; break;
case '(' : syn = 27 ; token[0] = ch ; break;
case ')' : syn = 28 ; token[0] = ch ; break;
case '#' :
case '\0' : syn = 0 ; token[0] = ch ; break; //结束标记为'#'或'\0'
default : syn = -1 ;
}
}
int main()
{
int flag ;
do
{
flag = 1 ;
scaner() ;
switch( syn )
{
case -1 : printf("源程序中有非法字符\n"); flag = 0 ; break ;
case 0 : printf("源程序编译结束\n"); flag = 0 ; break ;
case 11 : printf("( %d , %d )\n",syn,sum) ; break ;
default : printf("( %d , %s )\n",syn,token); break ;
}
}while(flag) ;
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -