张小明 2026/1/16 11:21:40
工信部网站备案查询验证码错误,wordpress怎么换log,电脑培训班附近有吗,宁波网站建设网站排名优化1.实验目的
设计一个LR分析器#xff0c;实现对表达式语言的分析#xff0c;加深对LR语法分析方法基本思想的理解#xff0c;掌握LR分析器设计与实现的基本方法。 2.实验要求
建立文法及其LR分析表表示的数据结构#xff0c;设计并实现一个LALR(1)的分析器#xff0c;对…1.实验目的设计一个LR分析器实现对表达式语言的分析加深对LR语法分析方法基本思想的理解掌握LR分析器设计与实现的基本方法。2.实验要求建立文法及其LR分析表表示的数据结构设计并实现一个LALR(1)的分析器对源程序经词法分析后生成的二元式代码流进行分析。若输入串是文法定义的句子则输出 “是”否则输出 “否”。3.实验内容1文法描述及其LALR(1)分析表描述表达式语言的文法G如下0. S → E 1. E → ET 2. E → T 3. T → T*F 4. T → F 5. F → (E) 6. F → ID该文法的LALR(1)分析表如下。2LR分析器总控程序框架push(0); advance(); while(Action[tos][sym]!accept) if(Action[tos][sym] -) error(); else if (Action[tos][sym] SN) { push(N); advance(); } else ifAction[tos][sym] RN { act(N); pop(产生式 N 的右部的符号个数); push(Goto[新 tos][ 产生式 N 的左部符号]) accept(); }算法中函数与符号说明符号 / 函数含义accept()返回成功状态LR分析器停止工作act(N)执行利用产生式N的归约的动作通常为产生代码advance()从输入流读下一单词到symerror()出错处理pop(N)从栈顶弹出N个符号状态push(N)把状态N压入状态栈sym当前输入的单词符号tos栈顶状态号3存放LR分析表的数据结构① 实现方法一二维整数数组表示数组元素为表示动作的整数行下标为状态号列下标为终结符与非终结符的整数表示。约定正整数移进动作如S6用6表示负整数归约动作如R5用-5表示0接受通常为按产生式0归约状态号也用整数表示用不可能是状态号的较大的整数表示错误转移。请将上述 LALR(1)分析表用这种表示方法完成LR分析器的程序设计并添加输出状态栈内容的功能。用上述表达式文法G的一个句子作为输入进行测试。② 实现方法二压缩表示法动作Action表的每一行用一个数组表示数组的第一个元素是本数组中存放的数偶个数第二个元素到最后一个元素都以[终结符动作]的数偶的形式存放。再用一个以状态号为下标的下标数组每个元素含一个指向数偶数组的指针。若数组元素的值为NULL则表示从此状态无转移弧发出。若分析表有几行相同则只需保存一行其它元素则都指向存放这一行表的数组即可。转移Goto表也按同样方式组织只是这个行数组的数偶为[非终结符下一状态号]。每个行数组Yyan表示动作表Yy_action的一行每个行数组Yygn表示转 移表Yy_goto的一行。假定上述表达式文法G中终结符及非终结符的整数值为终结符 # ID * ( ) 非终结符 S E T F整数值 0 1 2 3 4 5 整数值 0 1 2 3Yy_action数组是以状态号为下标的下标数组每个元素含有指向数组Yyan的指针下标数组Yy_goto的每个元素含有指向数组Yygn的指针。表达式文法G的LALR(1)分析表的具体压缩表示如下以上分析表用C语言程序描述如下/* * Yy_action 表 */ int Yya000[]{2,4,2,1,1}; int Yya001[]{4,5,-6,3,-6,2,-6,0,-6}; int Yya003[]{2,0,0,2,7}; int Yya004[]{4,5,-2,2,-2,0,-2,3,8}; int Yya005[]{4,5,-4,3,-4,2,-4,0,-4}; int Yya006[]{2,5,9,2,7}; int Yya009[]{4,5,-5,3,-5,2,-5,0,-5}; int Yya010[]{4,5,-1,2,-1,0,-1,3,8}; int Yya011[]{4,5,-3,3,-3,2,-3,0,-3}; int *Yy_action[] { Yya000, Yya001, Yya000, Yya003, Yya004, Yya005, Yya006, Yya000, Yya000, Yya009, Yya010, Yya011 }; /* * Yy_goto 表 */ int Yyg000[]{3,3,5,2,4,1,3}; int Yyg002[]{3,3,5,2,4,1,6}; int Yyg007[]{2,3,5,2,10}; int Yyg008[]{1,3,11}; int *Yy_goto[] { Yyg000, NULL, Yyg002, NULL, NULL, NULL, NULL, Yyg007, Yyg008, NULL, NULL, NULL }; /* * 为了进行归约使用一个 Yy_lhs[]数组其值为代表产生式左部符号的 * 整数数组的下标为产生式号 */ int Yy_lhs[7] { /* 0 */ 0, /* 1 */ 1, /* 2 */ 1, /* 3 */ 2, /* 4 */ 2, /* 5 */ 3, /* 6 */ 3 }; /* * Yy_reduce[]数组元素的值为产生式右部符号的个数 * 以产生式号为数组的下标索引 */ int Yy_reduce[] { /* 0 */ 1, /* 1 */ 3, /* 2 */ 1, /* 3 */ 3, /* 4 */ 1, /* 5 */ 3, /* 6 */ 1 };根据以上数组结构构造函数 Yy_next()其功能是在给定状态和输入符号下求出应采取的动作或转向的下一状态。int Yy_next(table, cur_state, symbol) int **table; /* 要查的表 */ int cur_state; /* 行号 */ int symbol; /* 列号 */ { int *ptable[cur_state]; int i; if(p) for(i(int)*p ; --i0 ; p2) if(symbol p[0]) return(p[1]); return YYF; /* 出错指示 */ };指针p指向Yyan数组或Yygn数组由参数table的值而定。如果table指向Yy_action则p指向Yyan数组若table指向Yy_goto则p指向Yygn数组据。根据上述LALR(1)分析表压缩表示方法完成LR分析器的程序设计并添加输出状态栈内容的功能。用上述表达式文法G的一个句子作为输入进行测试。4.实验结果1测试(IDID)*ID2测试IDID5.实验源码点击下方链接下载实验源码资源编译原理大作业4-LR分析-实验源码资源-CSDN下载
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
企业的网站公告怎么制作unix做网站常用的数据库
在当今的游戏开发领域,碰撞系统优化已成为决定射击游戏成败的关键因素。WinPython项目作为一个功能强大的Python发行版,为游戏开发者提供了完善的工具链来实现精准的碰撞检测。本文将深入探讨如何通过系统化的优化策略,提升射击游戏的整体体验…
做书的封面的网站素材wordpress高级靶机
CentOS系统软件包管理与日志管理全解析 1. 第三方仓库与自定义仓库创建 1.1 第三方仓库 存在许多第三方仓库,但部分仓库可能未得到维护,还有些仓库存在包冲突问题。若想了解哪些仓库应避免使用,哪些值得推荐,可访问 CentOS 的相关维基页面: https://wiki.centos.org/A…
企聚网站建设中国网站设计模板
LobeChat 辅助教师命题:智能时代的考试设计新范式 在一所普通高中的教研室里,物理组的老师们正围坐在一起为即将到来的期中考试出题。翻教材、查往届试卷、讨论难度分布——这套流程他们已经重复了十几年。一位年轻教师突然说:“如果能让 AI …
哪里可以做网站平台骄阳房地产网站
从零开始造一辆智能小车:Arduino课堂实战教学全记录你有没有见过学生围在一张桌子前,眼睛紧盯着一个刚拼好的小车缓缓启动?当它沿着黑线稳稳前行时,教室里突然爆发出一阵欢呼——那一刻,不是机器在动,是孩子…
网站开发前端学习四平市城市建设档案馆网站
量子测量、信息增益与量子信息理论的哲学思考 1. 量子测量与信息增益 1.1 信息增益的衡量方式 在量子测量中,信息增益有多种衡量方式,这里主要关注通过优势关系(majorization relation)和熵不等式来表达的信息增益。 优势关系 优势关系的直观解释是,如果 (x \prec y)…