• 大小: 6.69MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-03-18
  • 语言: C/C++
  • 标签:

资源简介

这是我用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个文件信息

评论

共有 条评论

相关资源