资源简介

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 < m_input.GetLength(); 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 Documenttle>\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个文件信息

评论

共有 条评论