资源简介
这是我用VC6.0(用了MFC类库)编写的一个集词法分析、语法分析为一体的程序,是我编译原理课程设计的拙作!压缩包里包括源代码、测试数据,可执行文件打包,安装文件打包,课程设计文档,程序使用说明和数据规范说明一应俱全。要花的分是多点,但是对需要的人超值,看你有没有眼光了!
代码片段和文件信息
// AnalyzeTable.cpp: implementation of the AnalyzeTable class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “LRCompiler.h“
#include “AnalyzeTable.h“
#include
using namespace std;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//单词编码定义
const char* CAnalyzeTable::m_pErrorDescribe[]={
/*0*/ “没有文法数据“
/*1*/ “终结符的开始标识错误“
/*2*/ “非终结符的开始标识错误“
/*3*/ “开始符号的开始标识错误“
/*4*/ “产生式的开始标识错误“
/*5*/ “产生式的书写格式错误“
/*6*/ “集合的开始标识错误“
/*7*/ “开始符号不能不在非终结符集中“
/*8*/ “产生式的集合不能为空“
/*9*/ “不能有既是终结符又是非终结符的符号“
/*10*/ “产生式的左部有不合法的字符“
/*11*/ “产生式的右部有不合法的字符“
/*12*/ “文法中不允许包含空产生式“
};
CAnalyzeTable::CAnalyzeTable()
{
//指针变量初始化
m_pStrErrorList = new StrTokenNode;
m_pStrErrorList->str.Empty();
m_pStrErrorList->next = NULL;
m_pStrTokenHead = NULL;
m_pTable = NULL;
}
CAnalyzeTable::~CAnalyzeTable()
{
}
void CAnalyzeTable::Init()
{
//一般变量初始化
strcpy(m_str““);
m_boolLegal = true; //文法的输入格式是否合法有错误就置false
m_isLR0Legal = true; //文法是否合法的LR(0)文法有冲突就置false
m_nFinal=0; //终结符个数
m_nNotFinal=0; //非终结符个数
m_nPrecept=0; //产生式个数
m_nProjectSet=0; //LR(0)项目个数
}
/**分析过程主调函数
*
* @pram buf 源代码缓存区
* @return 结果所存储的文件名
*/
void CAnalyzeTable::RunAnalyze(char *buf)
{
Init();
if(m_pStrTokenHead && m_pStrErrorList->next && m_pTable)
Dispose();//释放上次调用时申请的资源
::strcpy(m_strbuf);
this->m_wordCompiler.RunMorpheme(m_str);
m_pStrTokenHead = this->m_wordCompiler.GetStrToken();
/*/for test
PStrTokenNode node = m_pStrTokenHead;
while(node)
{
str += node->str;
str += “\n\t“;
node = node->next;
}*/
//组织数据并查错
if(!FormData())// 组织数据文法输入格式是否是合法的
{
m_boolLegal = false;
}
else
{
if(!GrammerCheck())//对文法进行简单的集合间冲突的检查
{
m_boolLegal = false;
}
}
//进行LR(0)分析
if(IsLegal())//格式合法
GenerateLR0Table();
}
void CAnalyzeTable::SetStart(CString strStart)
{
m_strStart = strStart;
}
bool CAnalyzeTable::AddFinal(CString strFinal)
{
//bool Set::Insert(CString istr)//如果没有就插入,有了就不插入
return m_setFinal.Insert(strFinal);
}
bool CAnalyzeTable::AddNotFinal(CString strNotFinal)
{
return m_setNotFinal.Insert(strNotFinal);
}
void CAnalyzeTable::AddPrecept(PStrTokenNode strTokenHead)
{
PStrTokenNode strToken = strTokenHead;
//while(strToken->str != “.“ && strToken->next)
}
//对开始符号,终结符集非终结符集和产生式集进行组织
bool CAnalyzeTable::FormData()
{
if(!m_pStrTokenHead->next)
{
AddError(0);
m_boolLegal = false;
return false;//没有数据
}
//将token形式的数据进行有效的组织
PStrTokenNode token = m_pStrTokenHead->next;
int intSetType;
while(token)
{
//for test
//MessageBox(NUL
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2007-03-17 11:34 040410606-李文凯(LRCompiler 1.0版)
文件 395264 2007-03-17 11:32 040410606-李文凯(LRCompiler 1.0版)\LRCompiler 1.0版文档报告.doc
目录 0 2007-03-17 10:51 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序
文件 108 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\DATA.TAG
文件 3357853 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\data1.cab
文件 4557 1997-05-30 11:31 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\lang.dat
文件 353 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\layout.bin
文件 417 1997-05-06 14:15 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\os.dat
文件 82278 1997-04-16 01:46 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\setup.bmp
文件 59904 1997-11-19 16:09 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\SETUP.EXE
文件 73 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\SETUP.INI
文件 57756 2007-03-16 20:51 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\setup.ins
文件 49 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\setup.lid
文件 30 2007-03-16 21:01 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\sn.txt
文件 300178 1997-11-19 16:05 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\_INST32I.EX_
文件 8192 1997-11-19 16:05 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\_ISDEL.EXE
文件 11264 1997-11-19 16:08 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\_setup.dll
文件 186563 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\_sys1.cab
文件 45196 2007-03-16 20:57 040410606-李文凯(LRCompiler 1.0版)\LRCompiler安装程序\_user1.cab
目录 0 2007-03-17 10:51 040410606-李文凯(LRCompiler 1.0版)\可执行文件
文件 674304 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\advapi32.dll
文件 611328 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\comctl32.dll
文件 280064 2005-12-29 10:56 040410606-李文凯(LRCompiler 1.0版)\可执行文件\gdi32.dll
文件 1144832 2006-07-05 18:56 040410606-李文凯(LRCompiler 1.0版)\可执行文件\kernel32.dll
文件 327680 2007-03-16 21:03 040410606-李文凯(LRCompiler 1.0版)\可执行文件\LRCompiler.exe
文件 1028096 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\mfc42.dll
文件 413696 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\msvcp60.dll
文件 343040 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\msvcrt.dll
文件 591360 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\ntdll.dll
文件 581120 2004-08-04 08:52 040410606-李文凯(LRCompiler 1.0版)\可执行文件\rpcrt4.dll
............此处省略111个文件信息
- 上一篇:winxp符号文件包完整symbols
- 下一篇:VC/C++的旅游管理系统
评论
共有 条评论