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

📄 grammar.h

📁 编译原理LR(0)文法分析器 录入合法的LR(0)文法
💻 H
字号:
#if !defined(AFX_GRAMMAR_H__00D40BED_BB43_462E_ADF0_8354C265C84E__INCLUDED_)
#define AFX_GRAMMAR_H__00D40BED_BB43_462E_ADF0_8354C265C84E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Set.h"
#include "Precept.h"
#include "ProjectSet.h"
#include "GoData.h"
#include "Pair.h"
#include <vector>
using namespace std;

class Grammar  
{
public:
	int GetGoTo(int iStatus, char cChar);
	Pair GetAction(int iStatus, char cNext);
	Precept GetPrecept(int n);
	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);
	bool IsGrammarLegal();
	bool IsInVn(char cChar);
	bool IsInVt(char cChar);
	char GetStart();
	void GenerateLR0Table();
	string OutputHTML();
	void Output(char * pFilename);
	bool IsLegalLR0Grammar();
private:
	Set Vt;
	Set Vn;
	char cStart;
	vector <Precept> P;
	vector <ProjectSet> C;
	Pair * pTable;
	vector <GoData> GoSet;

	int nVt;
	int nVn;
	int nP;
	int nC;

	void EnlargeGrammar();
	void MakeProjects();
	void GenerateTable();
	
	Precept GetProject(const Pair & pair1);
	ProjectSet GetClosure(const Pair & pair1);
	ProjectSet MakeGoSet(int iI, char cChar);
	int GetGoSet(int iI, char cChar);
	bool AddProject(const ProjectSet & ps);
	bool FillTable(int nLine, char cChar, Pair p);
	int iLegal;
	
	void CopyGrammar(const Grammar & g);

protected:
	int GetProjectNum(const Pair & p);
};

#endif // !defined(AFX_GRAMMAR_H__00D40BED_BB43_462E_ADF0_8354C265C84E__INCLUDED_)

⌨️ 快捷键说明

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