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;
}