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

📄 grammar.h

📁 pl0编译器
💻 H
字号:
//Grammar.h

//本文件定义了文法GRAMMAR类,它通过initializtion.h的信息建立文法的内部表示。

#pragma once
#include "TypeDef.h"
using namespace std;



class Grammar
{
public:
	Grammar();
	~Grammar() {};
	//查找wordtype类型的search字符串的内部表示
	symbol Search(const string& search,symbol_type wordtype); 
	//输入内部表示,返回相应的文本信息
	string GetStr(const symbol &sym);
	//固定查找
	symbol Static_Search(const string& search);
	//把产生式输出
	void Show_Productions();
	//返回产生式的右部,在语法分析中使用
	const vector<symbol>& GetRight(int n) { return productions[n].rhs; }
	//返回产生式的左部
	symbol GetLeft(int n) { return productions[n].lhs; }
	//返回非终极符的个数
	int Get_Num_Nonterminal() { return nonterminals.size(); }
	//返回第i个非终极符
	symbol Get_Nonterminal(int i) 
	{
		if ( i >= nonterminals.size() ) return make_pair(Default,0);
		symbols::iterator s_it=nonterminals.begin();
		advance (s_it,i);
		return s_it->second;
	}
	//存放产生式数组
	vector<production> productions;
	//存放终极符
	symbols terminals;
	//存放非终极符
	symbols nonterminals;
	//存放动作符号
	symbols actions;
	//开始符
	nonterminal start_symbol;
	//判定是否是非终极符
	bool is_nonterminal(const symbol &X);
	//判定是否是终极符
	bool is_terminal(const symbol &X);
	//判定是否是动作符号
	bool is_action_symbol(const symbol &X);
	//实现语法分析中的“匹配”功能
	bool match(const terminal &X, const terminal &Y);
protected:
	vector<string> Intliterals;  //常数表
	vector<string> id;	 //标识符表
	vector<string> Chars; //字符常量表
};

⌨️ 快捷键说明

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