資源簡介
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? 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? {
//?左部
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個文件信息
評論
共有 條評論