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

📄 commondef.h

📁 包括一个LR(1)的语法分析程序和一个LL(1)的语法分析程序的例子
💻 H
字号:

//文件说明:这个文件中包括一些在整个程序中用到的公用部分的定义
#ifndef COMMON_DEF
#define COMMON_DEF
//**********************************************************
typedef int Status;    
//LL(1)分析表元素结构类型定义
typedef struct _Elem{
	char notTerminals[3];   //non-terminals
	char terminal;					//Terminals
	char replace[10];		//the string to be placed and put to the top of the analstack
	int  nextStep;					//P  or N
}Elem;
typedef Elem * LElem;
//LR(0)分析表元素结构类型定义
typedef int Type;   //指示LR(0)的action动作type的类型 0:移进 1:归约 3:分析over
typedef struct _LRElem
{
	CString statusPrev;   //指示前一分析栈栈顶状态
	char chInput;					//输入字符(终结符)
	Type type;						//MOVE_IN, DEDUCE, or ACC or NOT_SUPPORT
	int  nNum;						//如果是移进的话,指出(status,chInput)对应的下一状态,如果是归约的话,指出要采用第几条归约规则
} LRElem;

//LR(0)的归约规则结构类型定义
typedef struct _Regulation
{
	CString left;   //规则的左部
	CString right;	//规则的右部
} Regulation;

//LR(0)的GoTo表元素结构类型定义
typedef struct _ElemGoto
{
	CString statusPrev;		//分析栈的前一状态
	CString symbol;				//符号栈中的栈顶符号
	CString statusNext;		//下一状态
} ElemGoto;

//***********************************************************

//************************************************************
//宏定义
#define OK  0
#define FAIL  -1  
#define END_OF_INPUT   -2    //输入结束
#define BEGINNING_OF_INPUT  -3   
#define P 1				//在LL(1)中指示动作状态为重复读字符
#define N 2				//在LL(1)中指示动作状态为读下一字符
#define ACC 3     //指示分析结束
#define TABLE_LENGTH  26    //LL(1)的分析表的长度
#define ASM_CODE_LENGTH  255  //编译到汇编码时的每条asm code的最大长度		
#define MOVE_IN  0			//指示LR(0)的action表的动作类型 ,表示移进
#define DEDUCE   1			//表示归约
#define NOT_SUPPORT -2       
//************************************************************
#endif

⌨️ 快捷键说明

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