资源简介
编译原理LL1文法的mfc实现,其中包括对LL1文法的First集合的算法,Follow集合的算法 select集合的算法 还包括消除左递归 提取左因子
![](http://www.nz998.com/pic/46266.jpg)
代码片段和文件信息
#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个文件信息
- 上一篇:用C++ 实现 防火墙 源代码
- 下一篇:地震数据SEGY格式的读写 C++
相关资源
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
- MFC坦克大战
评论
共有 条评论