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

📄 ll1.h

📁 一个开发程序
💻 H
字号:
/*修改后的文法规则
1 START->function id {L}
2 L->SA
3 A->;SA|EPS
4 S->{L}
5 S->while B do S
6 S->if B then S else S
7 S->id=E;
8 S->int D;

9 D->idF
10 F->,idF|EPS
11 B->(B)H|!BH|true H|false H|id relop E H
12 H->GH|EPS
13 G->&B||B
14 relop-><I|>I|==
15 I->=

16 E->JK
17 K->+JK|EPS
18 J->MN
19 N->*MN|EPS
20 M->(E)|num
*/
#include <stdio.h>
#define TER_START 16						/*非终结符的起始码*/
#define VAR_NUM   16						/*非终结符的个数( ε)*/
#define TER_NUM   25						/*终结符的个数*/
#define SUM_NUM VAR_NUM+TER_NUM				/*终结符与非终结符的总个数*/
#define EXP_NUM	  33						/*表达式的个数*/
#define EXP_LONGTH 8						/*exp_LONGTH=表达式的最大长度+1*/			
#define EXP_END    -1						/*表达式的结尾*/
#define ERROR      -1						/*分析错误表示*/
#define FIRST_END  -1						/*first集的结尾标示*/
#define FOLLOW_END -1						/*follow集的结尾标示*/
#define EPS_OUT  false						/*不包含EPS*/		
#define EPS_IN    true						/*包含EPS*/
/*文法符号(包括 结尾符号)*/
enum{
	START=0,L,A,S,D,F,B,H,G,relop,I,E,K,J,N,M,
		FUNC,WHILE,DO,IF,THEN,ELSE,INT,TRUE,FALSE,
		ID,NUM,
		L_BIG_BRACKET,	//{
		R_BIG_BRACKET,	//}
		EQU,			//=
		L_MINI_BRACKET,	//(
		R_MINI_BRACKET,	//)
		NOT,			//!,
		OR,				//|
		AND,			//&
		BIGGER,			//>
		SMALLER,		//<
		ADD,			//+
		MUL,			//*
		SEMICOLON,      //;
		DOT,            //,
		EPS,			//ε
		END,			//end	
};

/*保存文法表达式*/
int express[EXP_NUM][EXP_LONGTH]={
	{START,FUNC,ID,L_BIG_BRACKET,L,R_BIG_BRACKET,EXP_END},//START->FUNCTION ID{L}
	{L,S,A,EXP_END},//L->SA
	{A,SEMICOLON,S,A,EXP_END},//A->;SA
	{A,EPS,EXP_END},//EPS
	{S,L_BIG_BRACKET,L,R_BIG_BRACKET,EXP_END},//S->{L}
	{S,WHILE,B,DO,S,EXP_END},//S->while B do S
	{S,IF,B,THEN,S,ELSE,S,EXP_END},// S->if B then S else S
	{S,ID,EQU,E,EXP_END},//S->id=E;
	{S,INT,D,EXP_END},//S->int D;

	{D,ID,F,EXP_END},//9 D->idF
	{F,DOT,ID,F,EXP_END},//,10 F->,idF
	{F,EPS,EXP_END},//EPS
	{B,L_MINI_BRACKET,B,R_MINI_BRACKET,EXP_END},//B->(B)H|!BH|true H|false H|id relop E H
	{B,NOT,B,H,EXP_END},
	{B,TRUE,H,EXP_END},
	{B,FALSE,H,EXP_END},
	{B,ID,relop,E,H,EXP_END},
	{H,G,H,EXP_END},
	{H,EPS,EXP_END},//H->GH|EPS
	{G,AND,B,EXP_END},
	{G,OR,B,EXP_END},//G->&B||B
	{relop,BIGGER,I,EXP_END},//relop-><I|>I|==
	{relop,SMALLER,I,EXP_END},
	{relop,EQU,EQU,EXP_END},
	{I,EQU,EXP_END},//15 I->=
	{E,J,K,EXP_END,EXP_END},//16 E->JK
	{K,ADD,J,K,EXP_END,EXP_END},//17 K->+JK|EPS
	{K,EPS,EXP_END},
	{J,M,N,EXP_END},//18 J->MN
	{N,MUL,M,N,EXP_END},//19 N->*MN|EPS
	{N,EPS,EXP_END},
	{M,L_MINI_BRACKET,E,R_MINI_BRACKET,EXP_END},//20 M->(E)|num
	{M,NUM,EXP_END},
};
//first集(EPS)
typedef struct node {
	int TerValue ;
	node *next;
}Set; 
//所有文法符号的first集(包括EPS)
Set FirstSet[SUM_NUM+1];
//表达式的  first集(EPS)
Set ExpFirstSet[EXP_NUM];
//非终结符的follow集(END)
Set FollowSet[VAR_NUM];
//预测分析表(EPS+END)
int PreTable [VAR_NUM][TER_NUM+1+1];
//作为输入串的缓冲区
int Buffer[EXP_LONGTH];
//求解符号串的first集时使用的临时缓冲区
Set Temp;
/*tokes文件*/
FILE*tokens=fopen("tokens.txt","r");
/*输出文件*/
FILE*output=fopen("output.txt","w");




⌨️ 快捷键说明

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