资源简介
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 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分析法实现
-
编译原理实验词法分析器、中间代码
-
编译原理实验
-
编译原理实验指导书
-
编译原理实验词法,语法,语义
-
华中科技大学编译原理实验报告
-
基于预测分析表法的语法分析程序
-
编译原理实验_赋值语句的翻译程序设
-
编译原理实验 中间代码生成
-
语法分析器 算符优先 编译原理实验
-
实验二 实现一门语言的词法分析器
-
编译原理实验 语义分析与中间代码
-
编译原理实验代码四则表达式编译及
-
河北工业大学编译原理实验
-
哈工大编译原理实验三次合一
-
编译原理实验----词法分析、分析预测
-
编译原理实验报告
-
编译原理实验报告 词法分析器实验报
-
编译原理实验报告+源代码 预测分析法
评论
共有 条评论