grammar.h

来自「通过VC 2008编译的LL1语法分析程序」· C头文件 代码 · 共 57 行

H
57
字号
#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 <Precept> P;
	CanEmpty * pCanEmptyTable;
	int * pPredictTable;
	vector <Set> FirstSet;
	vector <Set> FollowSet;
	vector <Set> 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);

};

⌨️ 快捷键说明

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