实验三编译原理综合实验报告——(LR(0)语法分析的实现)

实验三 编译原理综合实验报告
--(LR(0)语法分析的实现)

一、实验名称:LR(0)语法分析的实现

二、仪器、设备:计算机

三、参考资料:《编译原理教程》习题解析与上机指导(西安电子科技大 胡元义等)

四、实验目的:
综合运用所学知识,集成词法分析、符号表管理等程序的成果,编程实现LR(0)算法,能根据预先定义的文法规则生成LR(0)分析表,并对输入串进行语法分析。
具体即要实现:录入合法的LR(0)文法,将输出LR(0)分析表,并可以对输入的句子进行语法分析输出相应语法树。
五、实验内容:(实验步骤)
⑴ 按实习目的和要求,用C或者C++语言编写一个LR(0)的语法分析程序,同时考虑相应的数据结构。
⑵ 调试
调试例子应包括符合文法规则的LR(0)文法,以及分析程序能够判别的若干错例。作为纠错部分的功能体现 。
⑶ 输出
对于所输入的LR(0)文法,不论对错,都应有明确的信息告诉外界。对于符合规则的LR(0)文法,将输出LR(0)分析表,并可以对输入的句子进行语法分析输出相应语法树。
⑷ 扩充
有余力的同学,可适当扩大分析算法。譬如:
① SLR(1)分析方法的实现
② LR(1)分析方法的实现

六、实验原理、数据(程序)记录
(一)实验原理:
利用LR(k)类分析算法的四个步骤,分别实现"移进"、"归约"、"成功"、"报错"的分析能力。同时采用相应的数据结构实现分析表的描述。
(二)程序框架:

#include "stdafx.h"
#include "GoData.h"
GoData::GoData()
{
iFrom = -1;
cChar = '\0';
iTo = -1;
}
GoData::~GoData()
{
}
// AnalyzeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LR0ForWin.h"
#include "AnalyzeDlg.h"
#include <vector>
#include <cassert>
#include "Pair.h"
using namespace std;
#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_Control(pDX, IDC_EXPLORER1,


m_web);
DDX_Text(pDX, IDC_EDIT1, m_input);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAnalyzeDlg, CResizingDialog)
//{{AFX_MSG_MAP(CAnalyzeDlg

你可能喜欢

  • 算符优先
  • 编译原理词法分析实验报告
  • 程序设计
  • 编译原理语法分析器
  • C语言词法分析器

实验三编译原理综合实验报告——(LR(0)语法分析的实现)相关文档

最新文档

返回顶部