⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text.txt

📁 一个由c++编程的c语言的词法分析程序源代码
💻 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 + -