资源简介

编译原理LL1文法的mfc实现,其中包括对LL1文法的First集合的算法,Follow集合的算法 select集合的算法 还包括消除左递归 提取左因子

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “ClassPt.h“


CString Compare(CStringCString);

void ClassPt::Empty()
{
int i;
Count=0;
NewNonTerminator=‘A‘;
for(i=0;i<50;i++)
{
pleft[i].Empty();
pright[i].Empty();
priority[i]=9;     //优先级设置为最大,用于文法排序
}
}



bool ClassPt::RecordDel(CString leftCString right)
{
int ij;
for(i=0;i {
if(left==pleft[i] && right==pright[i])
{
for(j=i;j {
pleft[j]=pleft[j+1];
pright[j]=pright[j+1];
}
pleft[j].Empty();
pright[j].Empty();
priority[j]=9;
Count--;
return(true);
}
}
return(false);
}

int ClassPt::RecordDel(CString left)
{
int ij;
int num=0;
for(i=0;i {
if(left==pleft[i])
{
for(j=i;j {
pleft[j]=pleft[j+1];
pright[j]=pright[j+1];
}
pleft[j].Empty();
pright[j].Empty();
priority[j]=9;
Count--;
i--;
num++;
}
}
return(num);
}

bool ClassPt::RecordFind(CString left)
{
int i;
for(i=0;i {
if(left==pleft[i])
return(true);
}
return(false);
}

void ClassPt::RecordApp(CString leftCString right)
{
pleft[Count]=left;
pright[Count]=right;
Count++;
}

void ClassPt::GetInVn(CString str)          //录入原始非终结符集
{
Vn.Empty();
Vn=str;

}

void ClassPt::GetInVnPrimal(CString str)
{
VnPrimal.Empty();
VnPrimal=str;
}

CString ClassPt::GetNewVn()                //得到ClassPt类的所有非终结符集
{
int i;
CString Vnn;
// Vn.Empty();
Vnn.Empty();
for(i=0;i {
if(VnPrimal.Find(pleft[i][0])!=-1 && Vnn.Find(pleft[i][0])==-1)
Vnn+=pleft[i][0];
}
for(i=0;i {
if(Vnn.Find(pleft[i][0])==-1)
Vnn+=pleft[i][0];

}
Vn=Vnn;
return(Vn);
}

void ClassPt::SetStarter()                        //设置文法开始符号
{
Starter=pleft[0][0];
}

void ClassPt::GetNewNonTerminator()             //得到一个新的非终结符
{
GetNewVn();
while(Vn.Find(NewNonTerminator)!=-1)
NewNonTerminator++;
Vn+=NewNonTerminator;


}

void ClassPt::RemoveDirectLeftRecursion(CString left)     //消除直接左递归
{
int i;
GetNewNonTerminator();
for(i=0;i {
if(pleft[i]==left)
{
if(pright[i][0]==left)
{
pleft[i]=NewNonTerminator;
pright[i].Delete(01);
pright[i]+=NewNonTerminator;
}
else
{
pright[i]+=NewNonTerminator;
}
}
}
RecordApp(NewNonTerminator“ε“);


}

void ClassPt::InsteadOf(CString ToInsteadCString BeInstead)
{
int ijjmax;
CString buffer[10];
CString BufferLeftBufferRight;
CString leftright;
for(i=0;i<10;i++)
buffer[i].Empty();
j=0;
for(i=0;i {
if(pleft[i]==ToInstead)
{
buffer[j]=pright[i];
if(buffer[j]==“ε“)
buffer[j].Empty();
j++;
}
}
jmax=j;
for(i=0;i {
if(pleft[i]==BeInstead && pright[i][0]==ToInstead)
{
BufferLeft=pleft[i];
BufferRight=pright[i];

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     188928  2008-06-19 23:12  J\LL(1)文法分析.ppt

     文件       7175  2006-04-21 09:25  J\LL1文法\ClassPt.cpp

     文件       1559  2006-05-28 13:16  J\LL1文法\ClassPt.h

     文件        580  2006-04-19 21:00  J\LL1文法\CStack.cpp

     文件        262  2006-05-28 13:16  J\LL1文法\CStack.h

     文件      51315  2008-06-16 15:09  J\LL1文法\Debug\ClassPt.obj

     文件          0  2008-06-19 09:37  J\LL1文法\Debug\ClassPt.sbr

     文件      18560  2008-06-16 15:09  J\LL1文法\Debug\CStack.obj

     文件          0  2008-06-19 09:37  J\LL1文法\Debug\CStack.sbr

     文件    4236288  2008-06-19 16:29  J\LL1文法\Debug\LL1文法.bsc

     文件     159860  2011-06-30 16:06  J\LL1文法\Debug\LL1文法.exe

     文件     290792  2011-06-30 16:06  J\LL1文法\Debug\LL1文法.ilk

     文件      31056  2008-06-16 15:09  J\LL1文法\Debug\LL1文法.obj

     文件    7235728  2008-06-16 15:09  J\LL1文法\Debug\LL1文法.pch

     文件     492544  2011-06-30 16:06  J\LL1文法\Debug\LL1文法.pdb

     文件       4348  2011-06-30 14:41  J\LL1文法\Debug\LL1文法.res

     文件          0  2008-06-19 09:37  J\LL1文法\Debug\LL1文法.sbr

     文件     143681  2011-06-30 16:06  J\LL1文法\Debug\LL1文法Dlg.obj

     文件     225501  2011-06-30 16:06  J\LL1文法\Debug\LL1文法Dlg.sbr

     文件     105877  2008-06-16 15:09  J\LL1文法\Debug\StdAfx.obj

     文件    1374952  2008-06-16 15:09  J\LL1文法\Debug\StdAfx.sbr

     文件     320512  2011-06-30 19:17  J\LL1文法\Debug\vc60.idb

     文件     438272  2011-06-30 16:06  J\LL1文法\Debug\vc60.pdb

     文件      23244  2011-06-30 18:40  J\LL1文法\LL1文法.APS

     文件       2023  2011-06-30 19:20  J\LL1文法\LL1文法.clw

     文件       2033  2006-05-28 14:07  J\LL1文法\LL1文法.cpp

     文件       4645  2008-06-18 11:15  J\LL1文法\LL1文法.dsp

     文件        539  2006-04-07 22:25  J\LL1文法\LL1文法.dsw

     文件       1303  2006-04-07 22:19  J\LL1文法\LL1文法.h

     文件     107520  2011-06-30 19:20  J\LL1文法\LL1文法.ncb

............此处省略25个文件信息

评论

共有 条评论