📄 ll_table.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 + -