www.pudn.com > 编译原理LALR(1)文法分析器.zip > GRAMA.h


/***********************/ 
/*    CGRAMA类的定义   */ 
/***********************/ 
 
#include "List.h" 
#include "Gener.h" 
#include "Queue.h"	// Added by ClassView 
 
class CGRAMA  
{ 
public: 
	void PrintTable(); 
	void FirstX(int *array,List &first_set); 
	void First(int symbol,List &first_set); 
	void PrintRuleTable(); 
	char Decode(int num); 
	void OutPut(List &list); 
	void GetSymbol(List &item_set,List &symbol_list); 
	void PrintDFA(); 
	void FromItoJ(CItem &item,List &J);		 
	int GO(const List &I,int X,List &J);	//GO(I,X)函数 
	void ToItemSet();								//从文法转化为项目集 
	void Closure(List &kernel);				//COLSURE(I) 
	int EncodeVn(char ch); 
	int EncodeVt(char ch); 
	void Encode(char *&buf); 
	CGRAMA();										//默认构造函数 
	virtual ~CGRAMA(); 
protected: 
	int	*vt;										//终结符的整数数组 
	int	*vn;										//非终结符整数数组 
    char *vtstring;									//终结符的对应字符串 
    char *vnstring;									//非终结符的对应字符串 
    int gncount;									//产生式个数 
	List gn_list;							//产生式的链表 
	List	item_list;							//项目链表 
	int vtnum;										//非终结符个数 
	int vnnum;										//终结符个数 
	const int start_symbol;							//文法开始符号 
	Queue > state_queue;				//存放最后DFA的所有状态 
	List convert_list;						//DFA转换关系表 
	List rule_list;							//归约规则列表 
}; 
 
inline int GetStrLen(char *&buf)								 
{ 
	char *pS=buf; 
	for(int i=0;*pS!=-3;pS++,i++); 
	return i; 
}