資源簡介
LR分析器工作過程算法描述:
一個LR分析器的工作過程可看成是棧里的狀態序列,已規約串和輸入串所構成的三元式的變化過程。分析開始時的初始三元式為
(s0, #, a1a2……an#)
其中,s0為分析器的初態;#為句子的左括號;a1a2……an為輸入串;其后的#為結束符(句子右括號)。分析過程每步的結果可表示為
(s0s1……sm, #X1X2……Xm ai, ai+1……an#)
分析器的下一步動作是由棧頂狀態sm和現行輸入符號ai所唯一決定的。即,執行ACTION(sm,ai)所規定的動作。經執行每種可能的動作之后,三元式的變化情形是:
(1) 若ACTION(sm,ai)為移進,且s = GOTO(sm,ai),則三元式變成:
(s0s1……sm s, #X1X2……Xm ai, ai+1……an#)
(2) 若ACTION(sm,ai)= {A→β},則按照產生式A→β進行規約。此時三元式變為
(s0s1……sm s, #X1X2……Xm A, ai ai+1……an#)
此處s = GOTO(Sm-r,A),r為β的長度,β = Xm-r+1……Xm。
(3) 若ACTION(sm,ai)為“接受”,則三元式不再變化,變化過程終止,宣布分析成功。
(4) 若ACTION(sm,ai)為“報錯”,則三元式的變化過程終止,報告錯誤。
一個LR分析器的工作過程就是一步一步的變換三元式,直至執行“接受”或“報錯”為止。
代碼片段和文件信息
//?AnalyzeDlg.cpp?:?implementation?file
//
#include?“stdafx.h“
#include?“ll1forwin.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(“輸入的句子不全部由終結符組成“?“錯誤“?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(“ 步驟 符號棧 輸入串 所用生成式 “);
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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-07-11?09:52??編譯原理實驗代碼\
?????目錄???????????0??2012-07-11?09:52??編譯原理實驗代碼\LL1ForWin\
?????文件?????????148??2002-05-14?19:43??編譯原理實驗代碼\LL1ForWin\1.TXT
?????文件?????????151??2002-05-14?19:43??編譯原理實驗代碼\LL1ForWin\2.TXT
?????文件?????????158??2002-05-14?19:43??編譯原理實驗代碼\LL1ForWin\3.TXT
?????文件?????????189??2002-05-14?23:21??編譯原理實驗代碼\LL1ForWin\4.TXT
?????文件?????????186??2003-12-01?11:52??編譯原理實驗代碼\LL1ForWin\5.TXT
?????文件????????7555??2002-05-19?00:49??編譯原理實驗代碼\LL1ForWin\AnalyzeDlg.cpp
?????文件????????1850??2002-05-19?00:47??編譯原理實驗代碼\LL1ForWin\AnalyzeDlg.h
?????目錄???????????0??2012-07-11?09:52??編譯原理實驗代碼\LL1ForWin\Debug\
?????文件??????144385??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\AnalyzeDlg.obj
?????文件??????305538??2003-11-18?10:43??編譯原理實驗代碼\LL1ForWin\Debug\AnalyzeDlg.sbr
?????文件???????64423??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\explorer1.obj
?????文件???????13361??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\explorer1.sbr
?????文件??????156686??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Grammar.obj
?????文件??????276480??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Grammar.sbr
?????文件??????217190??2003-12-01?11:38??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.exe
?????文件??????443692??2003-12-01?11:38??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.ilk
?????文件???????15530??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.obj
?????文件?????7038796??2003-11-18?10:43??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.pch
?????文件??????656384??2003-12-01?11:38??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.pdb
?????文件????????4764??2003-12-01?11:38??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.res
?????文件????????3748??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWin.sbr
?????文件???????69074??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWinDlg.obj
?????文件??????269989??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\LL1ForWinDlg.sbr
?????文件???????17505??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Precept.obj
?????文件??????203091??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Precept.sbr
?????文件???????25532??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\ResizingDialog.obj
?????文件????????4679??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\ResizingDialog.sbr
?????文件???????43976??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Set.obj
?????文件???????93346??2003-11-18?10:44??編譯原理實驗代碼\LL1ForWin\Debug\Set.sbr
............此處省略61個文件信息
評論
共有 條評論
相關資源
-
編譯原理中間代碼生成實驗報告——
-
編譯原理實驗報告 熟悉算術表達式的
-
編譯原理實驗報告分析PL0詞法分析程
-
編譯原理實驗報告語法分析 遞歸下降
-
燕山大學編譯原理實驗報告.doc
-
編譯原理實驗 語法分析 遞歸下降分析
-
燕山大學軟件工程編譯原理實驗報告
-
編譯原理中采用遞歸下降子程序方法
-
編譯原理實驗五:有窮自動機的確定
-
北京工業大學編譯原理實驗
-
編譯原理實驗報告及源碼,LR1 活前綴
-
編譯原理實驗2-LL1分析法實現
-
編譯原理實驗詞法分析器、中間代碼
-
編譯原理實驗
-
編譯原理實驗指導書
-
編譯原理實驗詞法,語法,語義
-
華中科技大學編譯原理實驗報告
-
基于預測分析表法的語法分析程序
-
編譯原理實驗_賦值語句的翻譯程序設
-
編譯原理實驗 中間代碼生成
-
語法分析器 算符優先 編譯原理實驗
-
實驗二 實現一門語言的詞法分析器
-
編譯原理實驗 語義分析與中間代碼
-
編譯原理實驗代碼四則表達式編譯及
-
河北工業大學編譯原理實驗
-
哈工大編譯原理實驗三次合一
-
編譯原理實驗----詞法分析、分析預測
-
編譯原理實驗報告
-
編譯原理實驗報告 詞法分析器實驗報
-
編譯原理實驗報告+源代碼 預測分析法