📄 my.cpp
字号:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include<iostream.h>
char prog[200],token[20]; //taken[]用来存放构成单词符号的字符串
char ch;
int syn; //用来存放谒符号的种别码
int p; //缓冲区prog的指针
int m=0; //taken的指针
int n; //rwtable下标
int sum; //s存放整形单词
char *rwtable[6]={"begin","if","then","while","do","end"}; //关键字
void scaner(void);
void main()
{
system("color 47"); //设置字体背景颜色
p=0;
printf("\n 请输入字符串:\n");
do //获得字符串,放到prog[]中
{
ch=getchar();
prog[p++]=ch;
}while('#'!=ch);
p=0;
int b=1; //每输出5个回车换行
do
{
scaner(); //调用扫描函数
switch(syn)
{
case 11: //数字
printf("(11, %d) ",sum);
break;
case -1: //错误
printf("(ERR,'%s') ",token);
break;
default: //字母与运算符
printf("(%d, '%s') ",syn,token);
}
if(b++%5==0) //每5个换行
{
printf("\n\n");
}
}while(syn!=0);
system("pause");
}
void scaner(void)
{
for(n=0;n<20;n++) //初始化
token[n]=NULL;
ch=prog[p++];
while(' '==ch||' '==ch||'\n'==ch||'\t'==ch) //滤掉分隔符
ch=prog[p++];
if((ch>='a')&&(ch<='z')) //如果是字母
{
m=0;
while(((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(0==strcmp(token,rwtable[n]))
{
syn=n+1;
break;
}
}
else if((ch>='0')&&(ch<='9')) //如果是数字
{
sum=0; //sum置0
m=0;
syn=11;
token[m++]=ch;
while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')) //是数字字符读下一个字符
{
token[m++]=ch;
if(ch>='0'&&ch<='9')
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
else //只要其中有一个不是数字,syn=-1
{
ch=prog[p++];
syn=-1;
}
}
token[m++]='\0'; //让token成字符串
p--; //prog的指针减1.因为此进prog的指针指向的已经不是数字或字母了
}
else switch(ch) //其它字符
{
case'<':
{
m=0;
token[m++]=ch;
ch=prog[p++];
if('>'==ch) // <>
{
syn=21;
token[m++]=ch;
token[m++]='\0';
}
else if('='==ch) // <=
{
syn=22;
token[m++]=ch;
token[m++]='\0';
}
else // <
{
token[m++]='\0';
syn=20;
p--;
}
break;
}
case'>':
{
m=0;
token[m++]=ch;
ch=prog[p++];
if('='==ch) // >=
{
syn=24;
token[m++]=ch;
token[m++]='\0';
}
else // >
{
token[m++]='\0';
syn=23;
p--;
}
break;
}
case':':
{
m=0;
token[m++]=ch;
ch=prog[p++];
if('='==ch) // :=
{
syn=18;
token[m++]=ch;
token[m++]='\0';
}
else // =
{
token[m++]='\0';
syn=17;
p--;
}
break;
}
case'+':
{
syn=13;
token[0]=ch;
token[1]='\0';
break;
}
case'-':
{
syn=14;
token[0]=ch;
token[1]='\0';
break;
}
case'*':
{
syn=15;
token[0]=ch;
token[1]='\0';
break;
}
case'/':
{
syn=16;
token[0]=ch;
token[1]='\0';
break;
}
case'=':
{
syn=25;
token[0]=ch;
token[1]='\0';
break;
}
case';':
{
syn=26;
token[0]=ch;
token[1]='\0';
break;
}
case'(':
{
syn=27;
token[0]=ch;
token[1]='\0';
break;
}
case')':
{
syn=28;
token[0]=ch;
token[1]='\0';
break;
}
case'#':
{
syn=0;
token[0]=ch;
token[1]='\0';
break;
}
default:
{
syn=-1;
token[0]=ch;
token[1]='\0';
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -