• 大小: 0.07M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-25
  • 语言: 其他
  • 标签: 其他  

资源简介

43t9sb.rar

资源截图

代码片段和文件信息

// LR1.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
//#include “CharStack.h“
#include “MidCode.h“
#include “IntStack.h“
#include 

struct BNFNODE // 产生式节点
{
char Left; // 产生式左部
char Right[MAX_DATA_LEN]; // 产生式右部
char RLen; // 产生式右边长度
} m_Bnf[MAX_DATA_LEN];
int m_nBnfLen;

int m_nTempCount; // 生成临时变量记录

enum ACTIONTYPE // 动作类别
{
Push // 移进
Sumup // 规约
Accept // 接受
Error // 出错
};

struct LR1TABLE
{
int nStatus; // 状态
char CurChar; // 当前符号
ACTIONTYPE ActionType; // 动作类别
int nNextStatus; // 下一状态
} m_Lr1[MAX_DATA_LEN];
int m_nLr1Len;

/*****************************************************
* 以下是词法分析文件操作
******************************************************/
// 清空链表
void ClearWords(WORDNODE *pHeader)
{
WORDNODE *pNode;

while (pHeader != NULL)
{
pNode = pHeader->pNext;
free(pHeader);
pHeader = pNode;
}
}

// 增加结点
WORDNODE* AddNode(char c[] WORDNODE *pTail)
{
// c第0个字节为单词类别,第1个为逗号,第2个以后是值

WORDNODE *pNode = (WORDNODE *)malloc(sizeof(WORDNODE));
pNode->byType = c[0] - ‘0‘;
pNode->pNext = NULL;

int nChars = MAX_DATA_LEN - 2;
memcpy(pNode->Value &c[2] nChars);

pTail->pNext = pNode;
return pNode;
}

bool ReadWords(char FileName[] WORDNODE *pHeader)
{
// 打开文件
FILE *f = fopen(FileName “r“);
if (f == NULL)
{
ClearWords(pHeader);
return false;
}

WORDNODE *pTail = pHeader;
char c[MAX_DATA_LEN];

// 读取数据
while (!feof(f))
{
fscanf(f “%s\n“ c);
pTail = AddNode(c pTail);
printf(“%s\n“ c);
}

// 关闭文件
fclose(f);

// 增加一个结束符
c[0] = WT_OPERATOR + ‘0‘;
c[1] = ‘‘;
c[2] = ‘#‘;
c[3] = ‘\0‘;
AddNode(c pTail);

return true;
}

/*****************************************************
* 以下是文法文件操作
******************************************************/
char *ReadFile(char FileName[] int *nLen)
{
// 打开文件
FILE *f = fopen(FileName “r“);
if (f == NULL)
return NULL;

// 读取文件
char *pChar = (char *)malloc(sizeof(char) * MAX_DATA_LEN);

// 读取数据
int nRead;
*nLen = 0;
while (!feof(f))
{
nRead = fread(pChar + *nLen sizeof(char) MAX_DATA_LEN f);
*nLen += nRead;
if (nRead < MAX_DATA_LEN) // 文件结尾
break;

pChar = (char *)realloc(pChar *nLen + sizeof(char) * MAX_DATA_LEN);
}

// 关闭文件
fclose(f);

return pChar;
}

bool ReadBnfs()
{
// 读取文件
int nLen;
char *pChar = ReadFile(“Bnf.txt“ &nLen);
if (pChar == NULL)
return false;

// 解析出文法产生式
int nBegin nCur nIndex = 0;
for (nBegin = 0 nCur = 0; nCur < nLen; nCur++)
{
// 左部
m_Bnf[nIndex].Left = pChar[nCur];

// 右部
nCur += 2;
nBegin = nCur;
for (; pChar[nCur] != ‘;‘; nCur++);
m_Bnf[nIndex].RLen = nCur - nBegin;
memcpy(m_Bnf[nIndex].Right pChar + nBegin m_Bnf[nIndex].RLen);
m_Bnf[nIndex].Right[m_Bnf[nIndex].RLen] = ‘\0‘;

nIndex++;
}
m_nBnfLen = nIndex;

return true;
}

/***********

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

     文件         47  2005-11-15 23:29  实验材料\实验用源码\a.txt

     文件         27  2005-11-17 23:04  实验材料\实验用源码\b.txt

     文件         34  2005-12-10 18:52  实验材料\实验用源码\Bnf.txt

     文件         25  2005-11-17 23:05  实验材料\实验用源码\c.txt

     文件        974  2005-12-10 19:10  实验材料\实验用源码\CharStack.h

     文件         30  2005-11-17 23:08  实验材料\实验用源码\d.txt

     文件        471  2005-11-17 19:36  实验材料\实验用源码\IntStack.h

     文件       7001  2005-12-10 21:35  实验材料\实验用源码\LR1.cpp

     文件       4683  2005-12-10 19:41  实验材料\实验用源码\LR1.dsp

     文件        531  2005-11-15 21:28  实验材料\实验用源码\LR1.dsw

     文件        543  2005-12-10 18:39  实验材料\实验用源码\lr1.lr1

     文件      53760  2008-11-25 21:39  实验材料\实验用源码\LR1.opt

     文件          0  2008-11-25 21:38  实验材料\实验用源码\LR1.plg

     文件       1205  2005-12-10 20:44  实验材料\实验用源码\MidCode.h

     文件       1190  2005-11-15 21:28  实验材料\实验用源码\ReadMe.txt

     文件        290  2005-11-15 21:28  实验材料\实验用源码\StdAfx.cpp

     文件        769  2005-11-15 21:28  实验材料\实验用源码\StdAfx.h

     目录          0  2008-11-25 21:39  实验材料\实验用源码

     文件         47  2005-11-15 23:29  实验材料\语法制导翻译——自己检查用\a.txt

     文件         27  2005-11-17 23:04  实验材料\语法制导翻译——自己检查用\b.txt

     文件         34  2005-12-10 18:52  实验材料\语法制导翻译——自己检查用\Bnf.txt

     文件         25  2005-11-17 23:05  实验材料\语法制导翻译——自己检查用\c.txt

     文件         30  2005-11-17 23:08  实验材料\语法制导翻译——自己检查用\d.txt

     文件      40960  2005-12-10 21:29  实验材料\语法制导翻译——自己检查用\LR1.exe

     文件        543  2005-12-10 18:39  实验材料\语法制导翻译——自己检查用\lr1.lr1

     目录          0  2008-10-09 20:50  实验材料\语法制导翻译——自己检查用

     目录          0  2008-10-09 20:50  实验材料

     文件      68608  2007-04-14 01:39  中间代码生成实验指导.doc

----------- ---------  ---------- -----  ----

               181854                    28

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

评论

共有 条评论