資源簡(jiǎn)介
編譯原理LL1文法的mfc實(shí)現(xiàn),其中包括對(duì)LL1文法的First集合的算法,F(xiàn)ollow集合的算法 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;?????//優(yōu)先級(jí)設(shè)置為最大,用于文法排序
}
}
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)??????????//錄入原始非終結(jié)符集
{
Vn.Empty();
Vn=str;
}
void?ClassPt::GetInVnPrimal(CString?str)
{
VnPrimal.Empty();
VnPrimal=str;
}
CString?ClassPt::GetNewVn()????????????????//得到ClassPt類的所有非終結(jié)符集
{
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()????????????????????????//設(shè)置文法開(kāi)始符號(hào)
{
Starter=pleft[0][0];
}
void?ClassPt::GetNewNonTerminator()?????????????//得到一個(gè)新的非終結(jié)符
{
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];
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????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個(gè)文件信息
評(píng)論
共有 條評(píng)論