语法分析(自顶向下/自底向上)

自顶向下
  • 递归下降分析法

这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用。

  • LL(1)分析法

又称预测分析法,是一种不带回溯的非递归自顶向下分析方法。(使用显式栈)
LL(1)的含义是:第一个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将使用最左推导,1表明只需向右看一个符号便可决定如何推导,即选择哪个产生式(规则)进行推导。

需要解决的几个问题

1.怎么根据某个文法构造LL(1)分析表

First集

【注:first集需要注意的是----产生式右部是以非终结符开始 而且这个非终结符会推出ε,那么first集就得加入下一个的first集】

Follow集

【注:follow集需要注意的是----这种类型的产生式A->αBβ且β->ε的形式 与A->αB同样看待

2.怎么判断一个上下文无关文法是不是LL(1)文法

自底向上

  • 算符优先分析法(OPG)
它只考虑算符(终结符)之间的优先关系,分析扫描每个规约式的算符间优先关系。
算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法。如果G是一个不含空字符的算法文法,那么只要它的任一对终结符都至多只满足>,=,<的关系的其中一种,则称g是一个算符优先文法
假定G是一个不含空字符产生式的算符文法。对于任何一对终结符a,b,
  (1)a=b,当且仅当G中含有形如P->…ab…或P->…aQb…的产生式;
  (2)a<b, 当且仅当G中含有形如P->…aR…的产生式,而R-〉b…或R->Qb…;
  (3)a>b, 当且仅当G中含有形如P->…Rb…的产生式,而R->…a或R->…aQ;
【注:a<b不等价于b>a! 这里的等号左右顺序指明的是式子中这两个终结符的左右顺序。
实际上,这里的大小关系就是先后规约的优先级关系

需要解决的几个问题
  • 构造Firstvt以及Lastvt集
  • 接着便是构造优先关系表
给几个语法分析的例题
再看一个例子,判断某个上下文无关文法是否是LL(1)分析文法(或者将某个文法改造成LL(1)分析文法[其实,是先将这个文法消除左递归、回溯,这是LL(1)分析文法的基本条件,再应用充要条件判断是否是LL(1)分析文法])
算符优先分析法的例子
再看看下面这个例子(经过这些例题的理解,其实就是这两种语法分析就是在于 first/follow集 以及 firstvt/lastvt集的运算 再加上一点各自方法)
【附:一文一图】

转载于:https://www.cnblogs.com/zhouie/p/8955802.html

编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解相关推荐

  1. 编译原理学习笔记(二十九)~习题:分析句子 id--id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。

    题目 分析句子 id–id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系. 语法如下: E → E - T (1) E → T (2) T → T * F (3) T → F(4 ...

  2. [编译原理学习笔记2-2] 程序语言的语法描述

    [编译原理学习笔记2-2] 程序语言的语法描述 文章目录 [编译原理学习笔记2-2] 程序语言的语法描述 [2.3.1] 上下文无关文法 [2.3.2] 语法分析树与二义性 [2.3.3] 形式语言鸟 ...

  3. 编译原理学习笔记20——符号表

    编译原理学习笔记20--符号表 20.1 符号表的组织与操作 20.2 符号表的内容 20.3 利用符号表分析名字的作用域 20.1 符号表的组织与操作 符号表 符号表的作用与组织 符号表的整理和查找 ...

  4. 编译原理学习笔记2——高级程序设计语言概述

    编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...

  5. 编译原理(五)自底向上分析之算符优先分析法

    自底向上分析之算符优先分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本过程 1. 一般方法:采用自左向右地扫描和分析输入串,从输入符号串开始,通过反复查找当前句型的句 ...

  6. 【学习笔记】薛定谔的喵咪Cat—球盒问题(全详解)

    [学习笔记]薛定谔的喵咪Cat-球盒问题(全详解) 传送门:薛定谔的喵咪 \(Luogu-U77460\)(自自上传的题目,数据略水,尤其是 \(opt=9\) ,以后找时间补上) [题目描述] 当一 ...

  7. 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解

    语法分析(自顶向下 / 自底向上) 自顶向下 递归下降分析法 这种带回溯的自顶向下的分析方法实际上是一种穷举的不断试探的过程,分析效率极低,在实际的编译程序中极少使用. LL(1)分析法 又称预测分析 ...

  8. 编译原理系列之五 自底向上优先分析(2)-算符优先分析法

    算符优先分析法 1.基本概念 算符文法(OG):文法G中没有形如A=>···BC···的产生式,其中B.C为非终结符,则G为算符文法(operator grammar). 也就是说产生式的右部不 ...

  9. 自下而上的分析法——算符优先分析法

    概述 算符优先分析法(Operator Precedence Parse)是仿效四则运算的计算过程而构造的一种语法分析方法.算符优先分析法的关键是比较两个相继出现的终结符的优先级而决定应采取的动作. ...

最新文章

  1. 搭建rtx服务并客户端登录
  2. top 命令显示隐藏参数列
  3. RHEL5.5 安装 oracle 11g
  4. 各类神经网络知识收集
  5. JAVA ReentrantLock 分析
  6. 特定热点事件监控与分析项目
  7. [Err] 1205 - Lock wait timeout exceeded; try restarting transaction Mysql 报错
  8. tp中自定义跳转页面
  9. Enterprise Library Policy Injection Application Block 之一: PIAB Overview
  10. tomcat多实例部署相关
  11. Pycharm主题颜色设置
  12. Pspice仿真实验B-2
  13. 负载均衡添加ssl证书
  14. 苹果手机如何找回id密码_苹果手机丢失24天后成功找回
  15. 怪异,漂亮的几个数学恒等式(转)
  16. 西瓜书习题4.3 决策树
  17. 编译原理学习笔记(十五)~最小化DFA
  18. vue如何动态渲染本地图片img
  19. 吾父马达加斯加之旅-2
  20. 【算法-Java实现】 换钱的方法数(暴力递归法)

热门文章

  1. Android安全 通信篇(二)
  2. MySQL零基础从入门到精通(多表篇)
  3. programming terms
  4. 【每日新闻】《生命3.0》作者:在AI基础研究和教育投入上,中国完胜美国 | 工信部启动清理核查5G频段无线电台工作...
  5. Knockoutjs——checkbox全选
  6. linux下一款不错的背单词软件(reciteword)
  7. 环保新建材,幕墙新科技 智能光电LED玻璃屏颠覆传统广告市场
  8. FRR vxlan实验
  9. 用c语言做简单的用户管理系统,简单客户信息管理系统的设计与实现.doc
  10. 【五分钟读懂】PHP中的opcache是什么,opcache是用来干嘛的?