📄 scanner.h
字号:
#ifndef SCANNER_H
#define SCANNER_H
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"iostream.h"
char prog[80],token[8];
char ch;
int syn,p,m,n,sum;
//syn为单词种别码,p是缓冲区prog的指针,m是token的指针,sum为数字
char *rwtab[6]={"begin","if","then","while","do","end"};
void error()
{
cout<<"Error(s) appear(s)!\n";
}
void scanner()
{
for(n=0;n<8;n++)
token[n]=NULL;
m=0;
sum=0;
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if((ch>='A'&&ch<='Z')||(ch>='a' && ch<='z'))
{
while((ch>='A'&&ch<='Z')||(ch>='a' && ch<='z')||(ch>='0' && ch<='9'))
{
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;
}
cout<<'('<<syn<<','<<token<<')';
}
else
if(ch>='0'&&ch<='9')
{
while(ch>='0'&&ch<='9')
{
sum=sum*10+(int)(ch-'0');
ch=prog[p++];
}
p--;
syn=11;
cout<<'('<<syn<<','<<sum<<')';
}
else
switch(ch)
{
case '+':syn=13;cout<<'('<<syn<<','<<ch<<')';break;
case '-':syn=14;cout<<'('<<syn<<','<<ch<<')';break;
case '*':syn=15;cout<<'('<<syn<<','<<ch<<')';break;
case '/':syn=16;cout<<'('<<syn<<','<<ch<<')';break;
case ':':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=18;
cout<<'('<<syn<<','<<":="<<')';
}
else
{
syn=17;
cout<<'('<<syn<<','<<":"<<')';
p--;
}
break;
case '<':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='>')
{
syn=21;
cout<<'('<<syn<<','<<"<>"<<')';
}
else if(ch=='=')
{
syn=22;
cout<<'('<<syn<<','<<"<="<<')';
}
else
{
p--;
syn=20;
cout<<'('<<syn<<','<<"<"<<')';
}
break;
case '>':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=24;
cout<<'('<<syn<<','<<">="<<')';
}
else
{
p--;
syn=23;
cout<<'('<<syn<<','<<">"<<')';
}
break;
case '=':syn=25;cout<<'('<<syn<<','<<ch<<')';break;
case ';':syn=26;cout<<'('<<syn<<','<<ch<<')';break;
case '(':syn=27;cout<<'('<<syn<<','<<ch<<')';break;
case ')':syn=28;cout<<'('<<syn<<','<<ch<<')';break;
case '#':syn=0;cout<<'('<<syn<<','<<ch<<')';break;
default: syn=-1;error();break;
}
}
#endif SCANNER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -