資源簡(jiǎn)介
LR分析器工作過(guò)程算法描述:
一個(gè)LR分析器的工作過(guò)程可看成是棧里的狀態(tài)序列,已規(guī)約串和輸入串所構(gòu)成的三元式的變化過(guò)程。分析開始時(shí)的初始三元式為
(s0, #, a1a2……an#)
其中,s0為分析器的初態(tài);#為句子的左括號(hào);a1a2……an為輸入串;其后的#為結(jié)束符(句子右括號(hào))。分析過(guò)程每步的結(jié)果可表示為
(s0s1……sm, #X1X2……Xm ai, ai+1……an#)
分析器的下一步動(dòng)作是由棧頂狀態(tài)sm和現(xiàn)行輸入符號(hào)ai所唯一決定的。即,執(zhí)行ACTION(sm,ai)所規(guī)定的動(dòng)作。經(jīng)執(zhí)行每種可能的動(dòng)作之后,三元式的變化情形是:
(1) 若ACTION(sm,ai)為移進(jìn),且s = GOTO(sm,ai),則三元式變成:
(s0s1……sm s, #X1X2……Xm ai, ai+1……an#)
(2) 若ACTION(sm,ai)= {A→β},則按照產(chǎn)生式A→β進(jìn)行規(guī)約。此時(shí)三元式變?yōu)?(s0s1……sm s, #X1X2……Xm A, ai ai+1……an#)
此處s = GOTO(Sm-r,A),r為β的長(zhǎng)度,β = Xm-r+1……Xm。
(3) 若ACTION(sm,ai)為“接受”,則三元式不再變化,變化過(guò)程終止,宣布分析成功。
(4) 若ACTION(sm,ai)為“報(bào)錯(cuò)”,則三元式的變化過(guò)程終止,報(bào)告錯(cuò)誤。
一個(gè)LR分析器的工作過(guò)程就是一步一步的變換三元式,直至執(zhí)行“接受”或“報(bào)錯(cuò)”為止。
代碼片段和文件信息
//?AnalyzeDlg.cpp?:?implementation?file
//
#include?“stdafx.h“
#include?“l(fā)l1forwin.h“
#include?“AnalyzeDlg.h“
#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//?CAnalyzeDlg?dialog
CAnalyzeDlg::CAnalyzeDlg(CWnd*?pParent?/*=NULL*/)
:?CResizingDialog(CAnalyzeDlg::IDD?pParent)
{
//{{AFX_DATA_INIT(CAnalyzeDlg)
m_input?=?_T(““);
//}}AFX_DATA_INIT
m_strTempFilename?=?““;
m_pTree?=?new?CTreeDlg;
m_pTree->Create(IDD_DIALOG3?this);
m_pTree->SetControlInfo(IDC_TREE1?RESIZE_BOTH);
m_pTree->SetControlInfo(IDOK?ANCHORE_BOTTOM?|?ANCHORE_RIGHT);
}
CAnalyzeDlg::~CAnalyzeDlg()
{
m_pTree->DestroyWindow();
delete?m_pTree;
}
void?CAnalyzeDlg::DoDataExchange(CDataExchange*?pDX)
{
CResizingDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAnalyzeDlg)
DDX_Control(pDX?IDC_EDIT1?m_edit1);
DDX_Text(pDX?IDC_EDIT1?m_input);
DDX_Control(pDX?IDC_EXPLORER1?m_web);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAnalyzeDlg?CResizingDialog)
//{{AFX_MSG_MAP(CAnalyzeDlg)
ON_BN_CLICKED(IDC_BUTTON1?OnButton1)
ON_BN_CLICKED(IDC_BUTTON2?OnButton2)
ON_WM_ACTIVATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//?CAnalyzeDlg?message?handlers
void?CAnalyzeDlg::OnButton1()?
{
//?TODO:?Add?your?control?notification?handler?code?here
UpdateData(TRUE);
m_pTree->m_tree.DeleteAllItems();
for(int?i?=?0;?i? {
if?(!m_g.IsInVt(m_input.GetAt(i)))
{
MessageBox(“輸入的句子不全部由終結(jié)符組成“?“錯(cuò)誤“?MB_OK?|?MB_IConstop);
return;
}
}
char?szTempPath[MAX_PATH];?
char?szTempName[MAX_PATH];?
if?(m_strTempFilename?!=?““)
::DeleteFile(m_strTempFilename.c_str());
::GetTempPath(100szTempPath);
::GetTempFileName(szTempPath“LL1“0szTempName);
m_strTempFilename?=?szTempName;
CStdioFile?out;
out.Open(szTempName?CFile::modeCreate?|?CFile::modeWrite);
out.WriteString(“\n“);
out.WriteString(“\n“);
out.WriteString(“tle>Untitled?Document tle>\n“);
out.WriteString(“ta?http-equiv=\“Content-Type\“?content=\“text/html;?charset=gb2312\“>\n“);
out.WriteString(“\n“);
out.WriteString(“\n“);
out.WriteString(“yle=\“border-collapse:?collapse\“?bordercolor=\“#111111\“>\n“);
????out.WriteString(“ 步驟 符號(hào)棧 輸入串 所用生成式 “);
stack??input;
input.push(‘#‘);
for(i?=?m_input.GetLength()?-1;?i?>=?0;?i?--)
input.push(m_input.GetAt(i));
stack??s;
s.push(‘#‘);
s.push(m_g.GetStart());
Precept?p;
bool?error?=?false;
int?iStep?=?0;
stack??st;
HTREEITEM?hRoot?=?m_pTree->m_tree.InsertItem(CString(m_g.Get
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-07-11?09:52??編譯原理實(shí)驗(yàn)代碼\
?????目錄???????????0??2012-07-11?09:52??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\
?????文件?????????148??2002-05-14?19:43??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\1.TXT
?????文件?????????151??2002-05-14?19:43??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\2.TXT
?????文件?????????158??2002-05-14?19:43??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\3.TXT
?????文件?????????189??2002-05-14?23:21??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\4.TXT
?????文件?????????186??2003-12-01?11:52??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\5.TXT
?????文件????????7555??2002-05-19?00:49??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\AnalyzeDlg.cpp
?????文件????????1850??2002-05-19?00:47??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\AnalyzeDlg.h
?????目錄???????????0??2012-07-11?09:52??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\
?????文件??????144385??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\AnalyzeDlg.obj
?????文件??????305538??2003-11-18?10:43??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\AnalyzeDlg.sbr
?????文件???????64423??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\explorer1.obj
?????文件???????13361??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\explorer1.sbr
?????文件??????156686??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Grammar.obj
?????文件??????276480??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Grammar.sbr
?????文件??????217190??2003-12-01?11:38??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.exe
?????文件??????443692??2003-12-01?11:38??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.ilk
?????文件???????15530??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.obj
?????文件?????7038796??2003-11-18?10:43??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.pch
?????文件??????656384??2003-12-01?11:38??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.pdb
?????文件????????4764??2003-12-01?11:38??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.res
?????文件????????3748??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWin.sbr
?????文件???????69074??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWinDlg.obj
?????文件??????269989??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\LL1ForWinDlg.sbr
?????文件???????17505??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Precept.obj
?????文件??????203091??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Precept.sbr
?????文件???????25532??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\ResizingDialog.obj
?????文件????????4679??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\ResizingDialog.sbr
?????文件???????43976??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Set.obj
?????文件???????93346??2003-11-18?10:44??編譯原理實(shí)驗(yàn)代碼\LL1ForWin\Debug\Set.sbr
............此處省略61個(gè)文件信息
評(píng)論
共有 條評(píng)論
相關(guān)資源
-
編譯原理中間代碼生成實(shí)驗(yàn)報(bào)告——
-
編譯原理實(shí)驗(yàn)報(bào)告 熟悉算術(shù)表達(dá)式的
-
編譯原理實(shí)驗(yàn)報(bào)告分析PL0詞法分析程
-
編譯原理實(shí)驗(yàn)報(bào)告語(yǔ)法分析 遞歸下降
-
燕山大學(xué)編譯原理實(shí)驗(yàn)報(bào)告.doc
-
編譯原理實(shí)驗(yàn) 語(yǔ)法分析 遞歸下降分析
-
燕山大學(xué)軟件工程編譯原理實(shí)驗(yàn)報(bào)告
-
編譯原理中采用遞歸下降子程序方法
-
編譯原理實(shí)驗(yàn)五:有窮自動(dòng)機(jī)的確定
-
北京工業(yè)大學(xué)編譯原理實(shí)驗(yàn)
-
編譯原理實(shí)驗(yàn)報(bào)告及源碼,LR1 活前綴
-
編譯原理實(shí)驗(yàn)2-LL1分析法實(shí)現(xiàn)
-
編譯原理實(shí)驗(yàn)詞法分析器、中間代碼
-
編譯原理實(shí)驗(yàn)
-
編譯原理實(shí)驗(yàn)指導(dǎo)書
-
編譯原理實(shí)驗(yàn)詞法,語(yǔ)法,語(yǔ)義
-
華中科技大學(xué)編譯原理實(shí)驗(yàn)報(bào)告
-
基于預(yù)測(cè)分析表法的語(yǔ)法分析程序
-
編譯原理實(shí)驗(yàn)_賦值語(yǔ)句的翻譯程序設(shè)
-
編譯原理實(shí)驗(yàn) 中間代碼生成
-
語(yǔ)法分析器 算符優(yōu)先 編譯原理實(shí)驗(yàn)
-
實(shí)驗(yàn)二 實(shí)現(xiàn)一門語(yǔ)言的詞法分析器
-
編譯原理實(shí)驗(yàn) 語(yǔ)義分析與中間代碼
-
編譯原理實(shí)驗(yàn)代碼四則表達(dá)式編譯及
-
河北工業(yè)大學(xué)編譯原理實(shí)驗(yàn)
-
哈工大編譯原理實(shí)驗(yàn)三次合一
-
編譯原理實(shí)驗(yàn)----詞法分析、分析預(yù)測(cè)
-
編譯原理實(shí)驗(yàn)報(bào)告
-
編譯原理實(shí)驗(yàn)報(bào)告 詞法分析器實(shí)驗(yàn)報(bào)
-
編譯原理實(shí)驗(yàn)報(bào)告+源代碼 預(yù)測(cè)分析法