资源简介
编译原理中的算符优先文法,构造出一个优先表。
代码片段和文件信息
//===========================================================
// “FirstVT.cpp“
// This .cpp file is used to realization of FirstVT‘s class
//===========================================================
#include “FirstVT_LastVT.h“
using namespace std;
//-----------------------------------------------------------
FirstVT::FirstVT(int num_vnchar vn[]int num_vtchar vt[]
vector* first)
{
num_VN = num_vn;
//VN_First = vn;
for(int m=0;m VN_First[m] = vn[m];
num_VT = num_vt;
//VT_First = vt;
for(int n=0;n VT_First[n] = vt[n];
vector_First = first;
for(int i=0;i {
Result_First[i][0]=vn[i];
Result_First[i][1]=‘\0‘;
}
}
//-----------------------------------------------------------
void FirstVT::Scan_First()
{
for(int i=0;i<(*vector_First).size();i++)
{
string temp = (*vector_First)[i].right;
for(int j=0;j {
if(IsVT(temp[j]) && j==0)
{
//cout<<“\n“<<(*vector_First)[i].left<<“ “< stack_First.Push((*vector_First)[i].lefttemp[j]);
break;
}
else if(IsVT(temp[j]) && j==1)
{
//cout<<“\n“<<(*vector_First)[i].left<<“ “< stack_First.Push((*vector_First)[i].lefttemp[j]);
break;
}
}
}
}
//-----------------------------------------------------------
void FirstVT::Scan_Second()
{
char leftright;
DataType pop_element;
while(!stack_First.IsEmpty())
{
stack_First.Pop(&pop_element); //栈顶元素出栈
left = pop_element.left_VN;
right = pop_element.right_VT;
InsertTable(leftright); //将出栈的元素添加到FirstVt集合中
Seek_Left_VN(leftright); //找弹出的元素的左部符号是否能被别的非终结符推出.
}
}
//-----------------------------------------------------------
bool FirstVT::IsVT(char vt)
{
for(int i=0;i {
if(VT_First[i] == vt)
return true;
}
return false;
}
//-----------------------------------------------------------
void FirstVT::InsertTable(char leftchar right)
{
int ij;
for(i=0;i if(VN_First[i] == left)
break;
for(j=0;;j++)
if(Result_First[i][j] == ‘\0‘)
{
Result_First[i][j] = right;
break;
}
Result_First[i][j+1] = ‘\0‘;
}
//-----------------------------------------------------------
void FirstVT::Seek_Left_VN(char leftchar right)
{
string temp;
for(int i=0;i<(*vector_First).size();i++)
{
temp = (*vector_First)[i].right;
if(temp[0] == left && temp[0] != (*vector_First)[i].left)
stack_First.Push((*vector_First)[i].leftright);
}
}
//-----------------------------------------------------------
void FirstVT::Result_Return(char first[10][10])
{
cout<<“\nFirstVT 二维表:\n“;
for(int i=0;i {
for(int j=0;first[i][j] = Result_First[i][j]Result_First[i][j] != ‘\0‘;j++)
{
cout< }
cout< }
}
//-----------------------------------------------------------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3033 2008-05-25 21:41 PriorityTable\FirstVT.cpp
文件 2897 2008-05-24 22:01 PriorityTable\FirstVT_LastVT.cpp
文件 2055 2008-05-25 21:02 PriorityTable\FirstVT_LastVT.h
文件 2213 2008-05-25 21:05 PriorityTable\Input.cpp
文件 798 2008-05-25 21:01 PriorityTable\Input.h
文件 3109 2008-05-25 21:40 PriorityTable\LastVT.cpp
文件 249 2008-05-25 21:06 PriorityTable\PriorityTable.asp
文件 1570 2008-05-25 21:27 PriorityTable\PriorityTable.cpp
文件 4991 2008-05-25 21:08 PriorityTable\PriorityTable.dsp
文件 532 2008-05-25 20:59 PriorityTable\PriorityTable.dsw
文件 91136 2008-06-27 23:16 PriorityTable\PriorityTable.ncb
文件 51712 2008-06-27 23:16 PriorityTable\PriorityTable.opt
文件 7222 2008-06-27 23:16 PriorityTable\PriorityTable.plg
文件 4406 2008-05-25 21:38 PriorityTable\Scan.cpp
文件 752 2008-05-25 21:41 PriorityTable\Scan.h
文件 80 2008-05-25 21:08 PriorityTable\Source.txt
文件 1316 2008-05-25 21:06 PriorityTable\Stack.cpp
文件 936 2008-05-25 21:00 PriorityTable\Stack.h
文件 0 2008-05-20 09:47 PriorityTable\Table.cpp
文件 118 2008-05-20 10:33 PriorityTable\Table.h
目录 0 2008-06-27 23:16 PriorityTable\Debug
目录 0 2008-06-27 23:16 PriorityTable
----------- --------- ---------- ----- ----
179125 22
评论
共有 条评论