www.pudn.com > ll1forwin.zip > Grammar.h


#pragma once 
#include "Set.h" 
#include "Precept.h" 
 
class Grammar 
{ 
public: 
	Grammar(void); 
	~Grammar(void); 
	Grammar(const Grammar & g); 
	const Grammar operator = (const Grammar & g); 
	void SetVt(string vt); 
	void SetVn(string vn); 
	void SetStart(char start); 
	void AddPrecept(string p); 
	void GeneratePredictTable(); 
 
	bool IsGrammarLegal(); 
	string OutputHTML(); 
	void Output(char * pFilename); 
	bool IsInVn(char cChar); 
	bool IsInVt(char cChar); 
	char GetStart(); 
	Precept GetToDo(char vn, char vt); 
	bool IsLegalLL1Grammar(); 
private: 
	enum CanEmpty { CANTRUE, CANFALSE, UNDEFINED }; 
 
	Set Vt; 
	Set Vn; 
	char cStart; 
	vector  P; 
	CanEmpty * pCanEmptyTable; 
	int * pPredictTable; 
	vector  FirstSet; 
	vector  FollowSet; 
	vector  SelectSet; 
	int nVt; 
	int nVn; 
	int nP; 
	int iIsLL1; 
 
	void MakeCanReachEmptyTable(); 
	void CalculateFirstSet(); 
	void CalculateFollowSet(); 
	void CalculateSelectSet(); 
	 
	void MakePredictTable(); 
 
	bool CanReachEmpty(string str); 
	bool CanReachEmpty(char cChar); 
	Set GetFirstSet(char cChar); 
	Set GetFirstSet(string str); 
	Set GetFollowSet(char cChar); 
 
};