📄 text.txt
字号:
/*
S->(A) or aAb
A->eB or dSB
B->dB or null
leixing 0 zhongjiefu
1 fei zhongjiefu
终结符号 ( ) a b d e null
非终结符号 A B S
*/
#include<stdio.h>
#define MSIZE 20
char buffer[MSIZE];
struct output
{
char fuhao;
int leixing;
/*
leixing定义:
终结符号 ( ) a b d e null leixing=1
非终结符号 A B S leixing=2
*/
};
void cifa(char c,output *o)
{
output output1;
output1.fuhao=c;
o->fuhao=c;
switch(c)
{
case 'a':
case 'b':
case '(':
case ')':
case 'd':
case 'e':
{
output1.leixing=1;
o->leixing=1;
break;
}
case 'A':
case 'B':
case 'S':
{
output1.leixing=2;
o->leixing=2;
break;
}
default:
printf("%c not a token\n",c);
break;
}
//if(output1.leixing==1||output1.leixing==2)
//printf("%d,%c\n",output1.leixing,output1.fuhao);
// output1.leixing=0;
// output1.fuhao=NULL;
}
void main()
{
char c=NULL;
printf("input expression\n");
int count=scanf("%s",&buffer);
printf("%s\n",buffer);
char *p=buffer;
while(*p!='\0')
//while(scanf("%c",c))
{
output o;
cifa(*p,&o);
if(output1.leixing==1||output1.leixing==2)
printf("%d,%c\n",o.leixing,o.fuhao);
//printf("%d",o.leixing);
//if(scanf("%c",c))break;
//if(c=getchar()=='/n')break;
p++;
}
return ;
}
//以前学习的时候书上说的是scanf()的返回值等于得到输入值的输入项的个数
//getchar()从控制台读取一个字符,并回显,它和getch(),getche()的不同在于,
//它等到输入一个回车才结束,就算你输入了一个字符串,它也只取其中的第一个字符.
/*
原来想用scanf()将一次输入的字符串一个一个字符的取出。现在改为一次输入缓冲
再一个一个取出来。
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -