云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 实验二 语法分析(算符优先)(2)

实验二 语法分析(算符优先)(2)

  • 62 次阅读
  • 3 次下载
  • 2025/12/12 4:24:42

编译原理实验报告

实验名称:语法分析器设计

专业:计算机科学与技术 姓名:田莉莉 学号:201117906

语法分析—算符优先分析程序

一.实验要求

⑴ 选择最有代表性的语法分析方法,如算符优先法、递归子程序法或LR分析法

⑵ 选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。

⑶ 实习时间为6学时。

二.实验内容及要求

(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表 输出到屏幕或者输出到文件);

(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)

(3)给定表达式文法为: G(E’): E’→#E#

E→E+T | T T→T*F |F F→(E)|i

(4)分析的句子为: (i+i)*i和i+i)*i

三.程序设计思想及实现步骤

程序的设计思想:

按照编译原理教材提供的算法,本程序的设计主要实现三个主要的过程: (1) 求解FristVT集和LastVT集:利用CString数组存放VT集,利用数组

下标对应非终结符关系;

(2) 输出算符优先分析表:利用MFC中的ClistCtrl控件输出显示算符表,

比利用二维数组对应其在内存中的关系。

(3) 利用算符优先分析表进行归约:根据教材所给算法,并对其进行实现在

屏幕上输出归约过程。

实现步骤:

1、为程序各变量设计存储形式,具体设计如下所示:

CString m_strTElem[T_LEN]; CString m_strNTElem[NT_LEN]; CMapStringToPtr m_mapProdu;

//终结符 //非终结符 //存放产生式

CMapStringToPtr m_mapProduEX; CString m_strFristVT[NT_LEN]; CString m_strLastVT[NT_LEN]; int m_nPriSheet[T_LEN+1][T_LEN+1]; Find m_F[STACK_LEN]; CStrack m_stack;

//存放扩展产生式 //fristVT集 //lastVT集

//优先表;无穷大表示空白,-1表示小于,0表示相等,1表示大于 //bool数组 //堆栈

2、为程序设计各个过程,具体设计如下所示:

void CreateFristVT(Find* F); //为每一个非终结符创建FristVT集 void CreateLastVT(Find* F); //为每一个非终结符/创建LastVT集 void SearchPForFirtVT(Find& f); //搜索形如P->a….或P->Qa…. 的产生式 void SearchQForFristVT(void); //搜索形如P->....Q的产生式 void SearchPForLastVT(Find& f); //搜索形如P->...aQ或P->...a的产生式 void SearchQForLastVT(void); //搜索形如P->....Q的产生式 OnBnClickedBtnAnasysic(); //点击按钮启动分析

3、对各个过程进行实现;

4、调试运行并检验实验结果,结果如图2.1和2.2所示:

图2.1 分析成功图

图2.2 分析失败图

四.程序源码

产生式初始化:

//产生式

CString* str = new CString; *str = _T(\

m_mapProdu.SetAt(_T(\ CString* str1 = new CString; *str1 = _T(\

m_mapProdu.SetAt(_T(\CString* str2 = new CString ; *str2 = _T(\

m_mapProdu.SetAt(_T(\CString* str3 = new CString;

*str3 = _T(\ m_mapProduEX.SetAt(_T(\CString* str4 = new CString; *str4 = _T(\

m_mapProduEX.SetAt(_T(\CString* str5 = new CString ; *str5 = _T(\

m_mapProduEX.SetAt(_T(\

程序主要代码:

void CGrammarAnalysisDlg::InitFind(void) {

int i,j; int k = 0;

while(k

{

for(i=0;i

for(j=0;j

m_F[k].m_strNTerm = m_strNTElem[i];

搜索更多关于: 实验二 语法分析(算符优先)(2) 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

编译原理实验报告 实验名称:语法分析器设计 专业:计算机科学与技术 姓名:田莉莉 学号:201117906 语法分析—算符优先分析程序 一.实验要求 ⑴ 选择最有代表性的语法分析方法,如算符优先法、递归子程序法或LR分析法 ⑵ 选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。 ⑶ 实习时间为6学时。 二.实验内容及要求 (1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表 输出到屏幕或者输出到文件); (2)根据算法和优先关系表分析给定表达式是否是该文法识别

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com