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

📄 语法分析-main.c

📁 用c语言编写的关于pascal语言语法分析,词法分析,语义分析(输出有点问题)
💻 C
字号:
#include "stdio.h"
#include "string.h"
#include "scaner.h"
void yucu();         //语句串分析程序
void statement();     //语名分析程序
void expression();     //表达式分析程序
void term();           //项分析程序
void factor();         //因子分析程序
int kk=0;
//语法分析程序
void irparser()          //begin<语句串>end
{
	if(syn==1)      //是否以begin 开头
	{
		scaner();   
		yucu();     //是,则分析语句串
		if(syn==6)      //是否以end结束
		{
			scaner();    //找到'#'
			if(syn==0&&kk==0)    //若以'#'结束,则syn=0
				printf("success!!!!");
		}
		else         //语句串输入没有错,则只是end输入错误
		{
			if(kk!=1)
				printf("\n没有'end',输入错误");
			kk=1;
		}
	}
	else          //不是以begin开头
	{
		printf("\n没有以'begin'开头,或输入'begin'错误");
		kk=1;
	}
}


//语句串分析程序
void yucu()          //<语句>(;<语句>)
{
	statement();    //第一个语句
	while(syn==26)    //识别;
	{
		scaner();
		statement();  //下一个语句
	}
}


//语句分析程序
void statement()      //赋值语句->标识符=表达式
{
	if(syn==10)      //标识符
	{
		scaner();
		if(syn==18)    //:=
		{
			scaner();
			expression();   //表达式
		}
		else
		{
			printf("\n输入'='错误");  //:=没有输入正确
			kk=1;
		}
	}
	else
	{
		printf("\n语句错误");
		kk=1;
	}
}



//表达式分析程序
void expression()     //<项>(+<项>|-<项>)
{
	term();        //项首
	while(syn==13||syn==14)
	{
		scaner();
		term();   
	}
}



//项分析程序
void term()          //<因子>(*<因子>|/<因子>)
{
	factor();     //首因子
	while(syn==15||syn==16)   //+,-
	{
		scaner();    
		factor();
	}
}


//因子分析程序
void factor()      //标识符|数字|表达式
{
	if(syn==10||syn==11)   //标识符|数字
	    scaner();
	else if(syn==27)      //(
	{
		scaner();
		expression();
		if(syn==28)        //)
			scaner();
		else
		{
			printf("\n输入')'错误");
			kk=1;
		}
	}
	else
	{
		printf("\n表达式错误");
		kk=1;
	}
}
void main()
{
	p=0;
	printf("\n please input string:\n");
	do                     //从键盘接收到prog
	{
		ch=getchar();
		prog[p++]=ch;
	}while(ch!='#');        //以#结束
	p=0;
	scaner();              //识别第一个单词,是否为begin
	irparser();      
}

⌨️ 快捷键说明

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