自上而下分析 4.4.

Slides:



Advertisements
Similar presentations
湘雅路街道 刘韬 2014 年 4 月 微时代 · 新挑战. 什么是微时代 : 微时代即以微博、微信 等作为传播媒介代表,以短 小精炼作为文化传播特征的 时代。 开福区湘雅路街道工委 微博:微型博客的简称,即一句话 博客,是一种通过关注机制分享简 短实时信息的广播式的社交网络平 台。 微信:是腾讯公司于.
Advertisements

大公教育行政职业能力测验讲义 邢长文老师. Page 2 大公教育全国客服热线:
组长:倪运超 小组成员:徐悦、曹吕卿、孙浩、徐圣尧.  上海的历史 上海的历史  上海的历史 上海的历史  上海的文化 —— 建筑 上海的文化 —— 建筑  上海的文化 —— 美食 上海的文化 —— 美食  香港的历史 香港的历史  香港的历史 香港的历史  香港的文化 —— 建筑 香港的文化.
一、 突出解析几何复习中的重点问题的通法通解 解析几何中的重点问题 一、 突出解析几何复习中的重点问题的通法通解 直线与圆锥曲线的位置关系 重点一.
湘雅医院中层干部培训讲座之二 医院行政管理工作思路 孙 虹 2010年10月27日.
第十三章 中国的传统科学技术 中国古代的科技曾经长期处于世界领先地位,对人类文明的进步作出过重要贡献,并形成了富有特色的科技文化。在今天,源自中国古代科技文化的中医学仍然在现实生活中发挥着积极的作用。
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
第五章 主张超尘绝俗的 佛家.
第二章 复式记账原理*** 主要内容、重点难点: 1.会计要素与会计等式*** 2.会计科目与账户*** 3. 借贷记账法***
校园信息管理系统 河北科技大学网络中心 2000/4/10.
氧气的制法 装置 原理 练习 随堂检测.
文明史观 文明史观,通常被称为文明史研究范式,是研究历史的一种理论模式。人类社会发展史,从本质上说就是人类文明演进的历史。
1、分别用双手在本上写下自己的名字 2、双手交叉
南美洲 吉林省延吉一高中 韩贵新.
將軍澳循道衛理小學 申請中一自行分配學位 家長晚會
2011年广西高考政治质量分析 广西师范大学附属外国语学校 蒋 楠.
1.6 中国人口迁移.
愛之花.
第三课 走向自立人生.
字母可表示: 人名 字母可表示: 地方 字母可表示: 数 (1)阿Q和小D看《阿P的故事》, Q 、D、P各表示什么?
雄伟的金字塔.
2007年11月考试相关工作安排 各考试点、培训中心和广大应考人员:
主题一 主题二 模块小结与测评 主题三 考点一 主题四 考点二 主题五 考点三 主题六 考点四 命题热点聚焦 考点五 模块综合检测 考点六.
分式的乘除(1) 周良中学 贾文荣.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
第四章 制造业企业 主要经济业务核算.
大数的认识 公顷和平方千米 角的度量、平行四边形和梯形 四年级上册 三位数乘两位数 除数是两位数的除法 统计.
中考试题的 基础性、科学性与规范性 刘文川
岳阳市教学竞赛课件 勾股定理 授课者 赵真金.
《思想品德》七年级下册 教材、教法与评价的交流 金 利 2006年1月10日.
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
你不得不知的几件事 2、图书《10天行测通关特训》 3、网络课程 《网校9元课程系列》《考前强化夜校班》 4、地面课程 《10天10晚名师密授营》《考前预测集训营》
1.1.2 四 种 命 题.
 第20讲 中国的交通.
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
第八章二元一次方程组 8.3实际问题与二元一次方程组.
第八章二元一次方程组 8.3实际问题与二元一次方程组 (第3课时).
动物激素的调节及其在农业生产中的应用(B级)
开 学 第 一 课 六年级3班.
Part5语法分析 授课:胡静.
《美国的两党制》选考复习 温州第二高级中学 俞优红 2018年6月14日 1.
自上而下分析 4.4.
第 12 章 交流電源 …………………………………………………………… 12-1 單相電源 12-2 單相三線式 ※ 12-3 三相電源.
第四章 语法分析.
第三章 词法分析.
Part5语法分析 授课:胡静.
第2次课 上下文无关文法
LL分析法 LL分析法的分析器由一张预测分析表(LL(1)分析表),一个控制程序(表驱动程序)及一分析栈组成 输入
第三章 文法和语言 本章目的为语言的语法描述寻求工具,以便: 对源程序给出精确无二义的语法描述。(严谨、简洁、易读)
编译原理 第四章 语法分析—自上而下分析 编译原理.
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
当当网入驻商户管理规定.
第四章 自顶向下语法分析方法 语法分析的主要工作:是识别由词法分析给出的单词 序列是否是给定的正确句子(程序)。
习题课 编译原理与技术 计算机科学与技术学院 李诚.
第六章 语法制导的翻译 本章内容 介绍一种语义描述方法:语法制导的翻译,介绍语法制导的翻译的实现方法。
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
微信商城系统操作说明 色卡会智能门店.
國民年金 np97006.
第 四 章 迴歸分析應注意之事項.
孔融《与曹操论盛孝章书》.
9.1.2不等式的性质 周村实验中学 许伟伟.
SLR(1)分析方法.
第四章 语法分析 南京大学计算机系 戴新宇
第2节 大气的热力状况 基础知识回顾 重点难点诠释 经典例题赏析.
递归下降法 1 递归下降法语法分析原理 递归子程序方法/递归下降法 对每个非终极符按其产生式结构产生相应语法分析子程序。
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
2.1 试验: 探究小车速度随时间变化的规律.
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
Presentation transcript:

自上而下分析 4.4

上节课重点 上下文无关文法的定义,四元组的构成 推导,最左推导,最右推导 形式语言与文法 左递归 提取左公因子 消除二义性 自上而下分析 LL(1)文法 FIREST函数 FOLLOW函数

4.3 自上而下分析 4.3.1 自上而下分析的一般方法 例 文法 S  aCb C  cd | c 为输入串w = acb建立分析树 不能处理左递归

4.3 自上而下分析 不能处理左递归的例子 算术表达文法 E  E + T | T T  T  F | F F  ( E ) | id E E + T E + T E + T … … …

4.3 自上而下分析 4.3.1 自上而下分析的一般方法 例 文法 S  aCb C  cd | c 为输入串w = acb建立分析树 不能处理左递归、复杂的回溯技术

4.3 自上而下分析 4.3.1 自上而下分析的一般方法 例 文法 S  aCb C  cd | c 为输入串w = acb建立分析树 不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来

4.3 自上而下分析 4.3.1 自上而下分析的一般方法 例 文法 S  aCb C  cd | c 为输入串w = acb建立分析树 不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来、难以报告出错的确切位置

4.3 自上而下分析 4.3.1 自上而下分析的一般方法 例 文法 S  aCb C  cd | c 为输入串w = acb建立分析树 不能处理左递归、复杂的回溯技术、回溯导致语义工作推倒重来、难以报告出错的确切位置、效率低

4.3 自上而下分析 4.3.2 LL(1)文法 对文法加什么样的限制可以保证没有回溯? 先定义两个和文法有关的函数 FIRST( ) = {a |  * a…, a  VT} 特别是, * 时,规定  FIRST( ) 对A的任何两个不同选择i 和j,希望有 FIRST(i )  FIRST(j ) =  若FIRST(i ) 或 FIRST(j )含,还需增加条件

4.3 自上而下分析 4.3.2 LL(1)文法 对文法加什么样的限制可以保证没有回溯? 先定义两个和文法有关的函数 FIRST( ) = {a |  * a…, a  VT} 特别是, * 时,规定  FIRST( ) FOLLOW(A) = {a | S * …Aa…,aVT} 如果A是某个句型的最右符号,那么$属于FOLLOW(A)

任何两个产生式A  |  都满足下列条件: 4.3 自上而下分析 LL(1)文法 任何两个产生式A  |  都满足下列条件: FIRST( )  FIRST( ) =  若 *  ,那么FIRST()  FOLLOW(A) =  例如, 对于下面文法,面临a…时,第2步推导不 知用哪个产生式 S  A B A  a b |  a  FIRST(ab)  FOLLOW(A) B  a C C  …

任何两个产生式A  |  都满足下列条件: 4.3 自上而下分析 LL(1)文法 任何两个产生式A  |  都满足下列条件: FIRST( )  FIRST( ) =  若 *  ,那么FIRST()  FOLLOW(A) =  LL(1)文法有一些明显的性质 没有公共左因子 不是二义的 不含左递归

计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 4.3 自上而下分析 计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 如果X是终结符,FIRST(X)= X

计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 4.3 自上而下分析 计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 如果X是终结符,FIRST(X)= X 如果XY1Y2…Yk, 且a在FIRST(Yi)集合中,并且Y1 * ε, Y2 * ε, …, Yi-1 * ε,则将a插入到FIRST(X)中。

计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 4.3 自上而下分析 计算X的FIRST(X)时,不断运用以下规则,直到没有新的终结符或ε可以被加入到FIRST(X) 如果X是终结符,FIRST(X)= X 如果XY1Y2…Yk, 且a在FIRST(Yi)集合中,并且Y1 * ε, Y2 * ε, …, Yi-1 * ε,则将a插入到FIRST(X)中。 如果X ε是一个产生式,则将ε插入到FIRST(X)中。

计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 4.3 自上而下分析 计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 将$放到FOLLOW(S)中,S是开始符,$是输入右端的结束标记

计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 4.3 自上而下分析 计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 将$放到FOLLOW(S)中,S是开始符,$是输入右端的结束标记 如果存在AαBβ,那么FIRST(β)中非ε的所有符号都在FOLLOW(B)中

计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 4.3 自上而下分析 计算非终结符A的FOLLOW(A)时,不断运用以下规则,直到没有新的终结符可以被加入到FOLLOW(A) 将$放到FOLLOW(S)中,S是开始符,$是输入右端的结束标记 如果存在AαBβ,那么FIRST(β)中非ε的所有符号都在FOLLOW(B)中 如果存在AαB或AαBβ,且FIRST(β)包含ε,则FOLLOW(A)中的所有符号都在FOLLOW(B)中。

4.3 自上而下分析 例 E  TE  E   + TE  |  T  FT  T    FT  |  F  (E) | id FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FIRST(E ) = {+, } FRIST(T ) = {, } FOLLOW(E) = FOLLOW(E ) = { ), $} FOLLOW(T) = FOLLOW (T ) = {+, ), $} FOLLOW(F) = {+, , ), $} * 在FRIST(T)中,+, )和$在FOLLOW (T) 中。

| array [simple] of type simple  integer | char | num dotdot num 4.3 自上而下分析 4.3.3 递归下降的预测分析 为每一个非终结符写一个分析过程 这些过程可能是递归的 例 type  simple |  id | array [simple] of type simple  integer | char | num dotdot num

4.3 自上而下分析 一个辅助过程 void match (terminal t) { if (lookahead == t) lookahead = nextToken( ); else error( ); }

4.3 自上而下分析 void type( ) { if ( (lookahead == integer) || (lookahead == char) || (lookahead == num) ) simple( ); else if ( lookahead ==  ) { match(); match(id);} else if (lookahead == array) { match(array); match( [ ); simple( ); match( ] ); match(of ); type( ); } else error( ); type  simple |  id | array [simple] of type

4.3 自上而下分析 void simple( ) { if ( lookahead == integer) match(integer); else if (lookahead == char) match(char); else if (lookahead == num) { match(num); match(dotdot); match(num); } else error( ); simple  integer | char | num dotdot num

4.3 自上而下分析 4.4.4 非递归的预测分析 a + b $ X Y Z 输入 预测分析程序 输出 栈 分析表M 以自然语言例子:我上课 请开门 做例子讲解非递归的自上而下分析

4.3 自上而下分析 非终 结符 输 入 符 号 id +  . . . E E  TE  E  E   +TE  T 分析表的一部分 非终 结符 输 入 符 号 id +  . . . E E  TE  E  E   +TE  T T  FT  T  T    T   FT  F F  id

4.3 自上而下分析 预测分析器接受输入id * id + id的前一部分动作 栈 输 入 输 出 $E id  id + id$

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  输 入 输 出 $E id  id + id$ $E T E  TE 

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT 

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  $E T  id F  id

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  $E T  id F  id $E T   id + id$

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  $E T  id F  id $E T   id + id$ $E T F  T   FT 

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  $E T  id F  id $E T   id + id$ $E T F  T   FT  id + id$

4.3 自上而下分析 栈 输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  输 入 输 出 $E id  id + id$ $E T E  TE  $E T F T  FT  $E T  id F  id $E T   id + id$ $E T F  T   FT  id + id$

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 我 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP VP NP 我 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP 我 VP 我 我 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP 我 VP 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP V N 我 N V 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP V N 我 上 N 上 上 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP V N 我 上 N 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP V N 我 上 课 课 课

4.3 自上而下分析 自然语言例子 S  NP VP | IM VP NP  我 IM  请 VP  V N V  上 | 开 NP VP V N 我 上 课

4.3 自上而下分析 4.4.4 非递归的预测分析 算法 初始时分析器的格局是: S$在栈里,其中S是开始符号并且在栈顶;w$ 在输入缓冲区 主程序

4.3 自上而下分析 4.4.4 非递归的预测分析 预测分析程序根据当前的栈顶符号X和输入符号a决定分析器的动作,它有四种可能: 如果X是非终结符,程序访问分析表M

4.3 自上而下分析

4.3 自上而下分析 4.4.5 构造预测分析表 (1)对文法的每个产生式A   ,执行(2)和(3) (2)对FIRST()的每个终结符a, 把A   加入M[A, a] (3)如果在FIRST()中,对FOLLOW(A)的每个终结符b(包括$), 把A  加入M[A, b] (4)M中其它没有定义的条目都是error

4.3 自上而下分析 4.4.5 构造预测分析表 例: E  TE  E   + TE  |  T  FT  F  (E) | id FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FIRST(E ) = {+, } FRIST(T ) = {, } FOLLOW(E) = FOLLOW(E ) = { ), $} FOLLOW(T) = FOLLOW (T ) = {+, ), $} FOLLOW(F) = {+, , ), $}

4.3 自上而下分析 4.4.5 构造预测分析表 非终 结符 输 入 符 号 id +  . . . E E  TE  E  输 入 符 号 id +  . . . E E  TE  E  E   +TE  T T  FT  T  T    T   FT  F F  id

4.3 自上而下分析 4.4.5 构造预测分析表 多重定义的条目 例: stmt  if expr then stmt e_part | other e_part  else stmt |  other  b FOLLOW(e_part) = (else, $) M[e_part, else]包括e_part  else stmt 和 e_part  

4.3 自上而下分析 非终 结符 输 入 符 号 other b else . . . stmt stmt  other e_part 多重定义的条目 非终 结符 输 入 符 号 other b else . . . stmt stmt  other e_part e_part else stmt e_part   expr expr  b

4.3 自上而下分析 非终 结符 输 入 符 号 other b else . . . stmt stmt  other e_part 多重定义的条目 非终 结符 输 入 符 号 other b else . . . stmt stmt  other e_part e_part else stmt expr expr  b

练习 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法 S->S and S | S or S| not S |ture | false | (S)

为字母表{a,b}上的下列每个语言设计一个文法 练习 为字母表{a,b}上的下列每个语言设计一个文法 每个a后面至少有一个b的所有串 a和b的个数相等的所有串

练习 构造下面LL(1)文法的分析表 D->TL T->int|real L->id R R->, id R | ε

练习 构造下面文法的LL(1)分析表 S-aBS|bAS|ε A->bAA|a B->aBB|b

练习 下面文法是否是LL(1)文法?说明理由。 S->AB|PQx A->xy B->bc P->dP|ε Q->aQ|ε