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

📄 ll_table.cpp

📁 语法分析程序 实现C语言的语法分析过程
💻 CPP
字号:
/*//此文件是表格类的定义,表格类是实现对表格的查询,找到应该到达的产生式的编号,
  //并且从文件中读入表格数据,并进行内存空间的分配,并且提供查找是不是终结符的功能
class LL_Table
{
	private:
		vector<string> vc_terminal;
		vector<string> vc_nonterminal;
		int **LL_table;
		ifstream in;
	public:
		LL_Table(const char filename[]);
		int checkTable(string strNonterminal,string strTerminal) ;
		int find(string s);
		bool isTerminal(string s);
		bool isNonterminal(string s);
		~LL_Table();
			
};*/

#include "main.h"

using namespace std;

LL_Table::LL_Table(const char filename[])
{
	int terminal_line,non_line,m1,n1;
	in.open(filename,ios_base::in);
	if(!in) 
	{
		cerr<<"open file"<<filename<<"error\n"; 
		exit(1);
	}
	in>>terminal_line;
	while(terminal_line--)
	{
		string s;
		in>>s;
		vc_terminal.push_back(s);
	}
	in>>non_line;
	while(non_line--)
	{
		string s;
		in>>s;
		vc_nonterminal.push_back(s);
	}
	in>>m1>>n1;
	m=m1;
	n=n1;
	LL_table=new unsigned int*[m1];
	if(LL_table==NULL) 
	{
		cerr<<"the momery is used out"<<endl;
		exit(1);
	}
	for(int i=0;i<m1;i++) 
	{
		LL_table[i]=new unsigned int[n1];
		if(LL_table[i]==NULL) 
		{
			cerr<<"the momery is used out"<<endl;
			exit(1);
		}
	}
	for(int i=0;i<m;i++)
		for(int j=0;j<n1;j++)
		{
			in>>LL_table[i][j];
		}

	in.close();
}

unsigned int LL_Table::checkTable(std::string strNonterminal, std::string strTerminal,unsigned int Line)
{
	unsigned int col,row;
	col=find(vc_terminal,strTerminal);
	row=find(vc_nonterminal,strNonterminal);
	if(col==vc_terminal.size() || row==vc_nonterminal.size()) return Line+1;
	
	return LL_table[row][col];

}

int LL_Table::find(vector<string> vec,string s)
{
	unsigned int pos=0;
	for(pos;pos<vec.size();pos++)
		if(s==vec[pos]) return pos;

	return pos;
}

bool LL_Table::isTerminal(std::string s)
{
	int p;
	p=find(vc_terminal,s);
	if(p==vc_terminal.size()) return false;
	return true;
}

bool LL_Table::isNonterminal(std::string s)
{
	int p;
	p=find(vc_nonterminal,s);
	if(p==vc_nonterminal.size()) return false;
	return true;
}

LL_Table::~LL_Table()
{
	for(int i=0;i<m;i++) 
	{
		delete[] LL_table[i];
	}
	delete[] LL_table;
}

⌨️ 快捷键说明

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