递归下降分析法的基本思想。_语法分析 | 递归下降分析算法
递归下降分析算法是自顶向下分析算法的一部分。
递归下降分析算法
- 也称为预测分析
- 分析高效(线性时间)
- 容易实现(方便手工编码)
- 错误定位和诊断信息准确
- 被很多开源和商业的编译器所采用
- GCC 4.0, LLVM, ...
- 算法基本思想
- 每个非终结符构造一个分析函数
- 用前看符号指导产生式规则的规则
对于给定的文法G如下:
S -> N V N
N -> s| t| g| w
V -> e| d
我们写出它的递归下降算法如下:
parse_S
一般算法框架
X -> β11 ... β1i| β21 ... β2j| β31 ... β3k| ...
对应的代码实现如下:
parse_X
举个例子,当 β11 ... β1i 为 a B c D 时,也就是 i 为 4。(其中大写表示非终结符,小写为终结符),则其分析过程如下:
parse_X
当然,使用递归下降算法也存在一定的问题,当对于上面给出的算法框架的第三行我们也是 a 开头的一些类符号的时候,当读入前看字符为 a 的时候,不仅仅可以对第一行的 a B c D 的判断执行操作,对于第三行也可以。
对算数表达式的递归下降分析
E -> E + T| T
T -> T * F| F
F -> num
对于给定的上述文法,我们应用其对句子 3+4*5 做语法分析
// a first try
parse_E()token = tokens[i++]if(token == num)? // E+T or Telse error("...")
然而该算法存在一定的问题,对于 token == num的情况下,我们不知道如何做出判断,因为就 E 可以推导出的结果来说 T 可以通过 F 推出 num, 而 E + T由于是 T 的递归,所以 T 能推出的 num , E +T 也可以推出。存在选择问题。
那么我们需要对算法进行改进。
对于 E 可以推出的 T 的结果可以衍生为 T+T+...+T,
而对于 T 可以推出的 F 的结果可以变为 F*F*...*F
于是我们可以构建新的算法,对上面的两个衍生结果进行判断。
// a second try
parse_E()parse_T()token = tokens[i++] while(token == +)parse_T()token = tokens[i++]parse_T()parse_F()token = tokens[i++] while(token == *)parse_F()token = tokens[i++]
原文链接:
- 编译原理 - 网易云课堂
递归下降分析法的基本思想。_语法分析 | 递归下降分析算法相关推荐
- 软件测试 边界值分析法,[转] 软件测试方法_边界值分析法
目录: ①边界值分析法的介绍和概念 ②边界值分析法的原理和思想 ③单缺陷假设和多缺陷假设 ④边界值测试数据类型 ⑤内部边界值分析 ⑥各类边界值测试介绍 ⑦基于边界值分析方法选择测试用例的原则 ⑧边界值 ...
- pde中微元分析法的主要思想_果然是清北学霸,高中数学解题思想与技巧方法,学会不下145分...
美国著名数学教育家波利亚说过,掌握数学就意味着要善于解题.而当我们解题时遇到一个新问题,总想用熟悉的题型去"套",这只是满足于解出来,只有对数学思想.数学方法理解透彻及融会贯通时, ...
- pde中微元分析法的主要思想_初中数学常用的思想方法丨所有题型的考试技巧最全整理,高分必备...
[导语]初中数学虽然是基础数学,但是这并不意味着就没有难度,特别是在素质教育下,从培养学生综合素质能力的角度出发,初中数学越来越重视数学思维的培养,因此在很多数学问题的设置上,都进行了相当难度的调整, ...
- 数学建模层次分析法例题及答案_斩获国际特等奖!兰理工数学建模团队为百年校庆献礼...
近日,2019年美国大学生数学建模竞赛(MCM-ICM)成绩正式公布. 兰州理工大学数学建模团队再创佳绩,分别获得国际特等奖(Outstanding Winner)1项.一等奖(Meritorious ...
- matlab层次分析法程序购置设备,[转载]MATLAB实现层次分析程序
层次分析法(AHP)适用于那些难于完全定量分析的问题.运用层次分析建模,大体上可按下面四个步骤进行: (1)建立递阶层次结构模型: (2)构造出各层次中的所有判断矩阵: (3)层次单排序及一致性检验: ...
- 递归下降分析法的基本思想。_还不懂这八大算法思想,刷再多题也白搭!
各位朋友好久不见呢.最近由于刚入职,作为职场萌新,所以大部分时间都花在了工作上.因而也没有太多时间来写文章啦,这篇文章也是定题了许久,迟迟没有落笔.等之后工作慢慢稳定,业务熟练起来,文章更新频率就会高 ...
- pde中微元分析法的主要思想_有限元方法的核心思想
有限元法(Finite Element Method)是基于近代计算机的快速发展而发展起来的一种近似数值方法,用来解决力学,数学中的带有特定边界条件的偏微分方程问题(PDE).而这些偏微分方程是工程实 ...
- python亲和性分析法推荐电影论文_数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法...
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb 7 14:38:33 201 ...
- python亲和性分析法推荐电影论文_关于《Python数据挖掘入门与实战》读书笔记二(亲和性分析)...
#原文的代码比较零散,网上的代码大多数互抄,先基于个人的理解对代码进行了归纳整理,并添加了注释importnumpyasnpfromcollectionsimportdefaultdictfromop ...
最新文章
- ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门
- [20170420]关于延迟块清除3.txt
- 玩转Android之在线视频播放控件Vitamio的使用
- ECMAScript Query实例
- GBin1分享:jQuery新手技巧之“避免过多使用$('.someclass')”
- 重庆python就业工资待遇-重庆Python人工智能编程
- @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】
- Java创建cookie和删除cookie
- 解决网站请求速度慢的一些方法
- 【英语学习】【Level 08】U05 Better option L2 Online shopping
- 最新!华为HCIA网络工程师题库精讲(02)
- Tomcat发布项目后JS中文乱码
- VUE源码相关面试题汇总
- 中南大学计算机软件专业曾进,中南大学_2012年校级优秀毕业生名单
- 金武彩印机械设备有限公司仓储管理系统设计与实现
- vue 实现ps图片编辑_Vue项目图片剪切上传——vue-cropper的使用
- Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果
- python| requests 访问 https网站
- 分水岭算法c语言,分水岭算法的概念及原理
- 小数点化分数的过程_小学数学分数和小数互化知识点归纳