📄 scaner.h
字号:
#include<stdio.h>
#include<stdlib.h>
char ch,ch1,ch2;;
int syn,p,m,n,sum;//syn为单词种别码,p是缓冲区prog的指针,m是token的指针,sum为数字
char *rwtab[6]={"begin","if","then","while","do","end"};
char prog[800],token[8];
double ff;
double converse(char *token)
{
ff=0;
char *rndptr;
ff=strtod(token,&rndptr);
return ff;
}
void scaner()
{
for(n=0;n<8;n++)
token[n]=NULL;
m=0;
ch=prog[p];
p++;
while(ch==' '||ch=='\t')
{
ch=prog[p];
p++;
}
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='\0'; p--; syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
else if((ch>='0'&&ch<='9'))
{
m=0;
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];}
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
if(ch=='.')
{ token[m++]=ch;
ch=prog[p++];
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
}
}
token[m++]='\0';
}
converse(token);
syn=11;
}
p--;
}
else switch(ch)
{
case'<':m=0;token[m++]=ch;
ch=prog[p++];
if(ch=='>')
{
syn=21;
token[m++]=ch;
}
else if(ch=='=')
{
syn=22;
token[m++]=ch;
}
else
{
syn=20; p--;
}
break;
case'>':m=0;token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
p--;
}
break;
case':':m=0;token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
p--;
}
break;
case'+':
ch1=prog[p-2];
if((ch1>='0'&&ch1<='9')||(ch1>='a'&&ch1<='z')||(ch1>='A'&&ch1<='Z')||ch1==')')
{ syn=13;token[0]='+';break;}
else
{ m=1;
token[0]='+';
ch=prog[p++];
if((ch>='0'&&ch<='9')) {
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];}
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
if(ch=='.')
{ token[m++]=ch;
ch=prog[p++];
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];}
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
}
token[m++]='\0';
}
converse(token);
syn=11;}
}
p--;
}
break;
case'-':
ch2=prog[p-2];
if((ch2>='0'&&ch2<='9')||(ch2>='a'&&ch2<='z')||(ch2>='A'&&ch2<='Z')||ch2==')')
{ syn=14;token[0]='-';break;}
else
{ m=1;
token[0]='-';
ch=prog[p++];
if((ch>='0'&&ch<='9')) {
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];}
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
if(ch=='.')
{ token[m++]=ch;
ch=prog[p++];
while((ch>='0'&&ch<='9'))
{
token[m++]=ch;
ch=prog[p++];
if((ch=='e'||ch=='E'))
{ token[m++]=ch;
ch=prog[p++];
if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
if((ch=='+'||ch=='-'))
{ token[m++]=ch;
ch=prog[p++];}
if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
{
ch=prog[p++];
while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
{
ch=prog[p++];
}
syn=-1;
p--;
return;
}
}
}
token[m++]='\0';
}
converse(token);
syn=11;}
}
p--;
}
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'#':syn=0;token[0]=ch;break;
case'\n':syn=-2;break;
default: syn=-1;break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -