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

📄 test.c

📁 递归下降语法分析器递归下降语法分析器递归下降语法分析器递归下降语法分析器
💻 C
字号:
/************************************************/
/*	程序名称:	递归下降语法分析器	*/
/*	程序用途:	编译原理实验(二)	*/
/*	编写日期:	2005年11月1日		*/
/*	实验题目:	识别下列表达式		*/
/*				E->E+T|T	*/
/*				T->T*F|F	*/
/*				F->(E)|i	*/
/*	程序版本:	1.0	Final		*/
/*	程序作者:	黄记瑶 B0226047		*/
/************************************************/

#include "stdio.h"
#include "malloc.h"

void e();
void f();
void t();
void t1();
void e1();

struct Lchar{
	char char_ch;
	struct Lchar *next;
}Lchar,*p,*h,*temp;
char ch;
int right;

void e(void)
{
	t();
	e1();
}

void t(void)
{
	f();
	t1();
}

void t1(void)
{
	if(h->char_ch=='*')
	{
		h=h->next;
		f();
		t1();
	}
	else
		if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')
			right=0;
}

void e1(void)
{
	if(h->char_ch=='+')
	{
		h=h->next;
		t();
		e1();
	}
	else
		if(h->char_ch=='#'||h->char_ch==')')
			return;
		else
			right=0;
}

void f()
{
	if(h->char_ch=='i')
		h=h->next;
	else
		if(h->char_ch=='(')
		{
			h=h->next;
			e();
			if(h->char_ch==')')
				h=h->next;
			else
				right=0;
		}
		else
			right=0;
}

void main(void)
{
	right=1;
	h=malloc(sizeof(Lchar));
	h->next=NULL;
	p=h;
	do{
		ch=getch();
		putch(ch);
		if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')
		{
			temp=malloc(sizeof(Lchar));
			temp->next=NULL;
			temp->char_ch=ch;
			h->next=temp;
			h=h->next;
		}
		else
		{
			temp=p->next;
			printf("\nInput a wrong char!Input again:\n");
			for(;;)
			{				
				if (temp!=NULL)
					printf("%c",temp->char_ch);						
				else
					break;
				temp=temp->next;
			}
		}
	}while(ch!='#');
	p=p->next;
	h=p;
	e();
	if(h->char_ch=='#'&&right)
		printf("\nOK!\n");
	else
		printf("\nError!\n");
	getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -