语法分析之自定向下语法分析概述与三个重要概念的集合



语法分析之自顶向下语法分析概述与三个重要概念的集合

 

自顶向下语法分析概述:

     基本思想

  1. 检查程序是否为文法的句子
  2. 按定义从开始符号出发能推导出程序
    
    一个一个尝试,选择规则没有依据。

例子:

     Z→aBb[1]|aD[2]

     B→b[3]|bB[4]

     D→d[5]|bD[6]

分析一个串abbd,穷举过程如下

Z#                    abbd#

aBb#                  abbd# (a匹配)

Bb#                   bbd#

bb#                   bbd#( B→b,两个b匹配)

#                      d#(匹配失败,回溯)

bBb#                  bbd#(匹配成功,b)

Bb#                    bd#

bb#                    bd#(B→b,b匹配成功)

b#                     d#(匹配失败,回溯)

bBb#                   bd#(b匹配)

Bb#                      d#(匹配失败)继续回溯(这里省略几步,直接回溯到了Z的另一条路径Z→aD)

aD#                      abbd#

D#                        bbd#

d#                         bbd#(匹配失败,回溯使用D的另外一条路径)

bD#                       bbd#

D#                         bd#

d#                         bd#(匹配失败,使用D的另外一条路径)

bD#                        bd#

D#                         d#

d#                          d#

#                            #

匹配成功。

 

选择规则的策略:

  • 穷举方法效率非常的差,从上面的过程,可以看出来
  • 考虑更过的信息,如输入流
  • 根据输入流选取规则
  • 考察输入流的几个符号,比如头符

 

First集的定义

设G = (Vt, Vn, S,
P)是上下文无关文法,2型文法。

β
∈(Vt ∪
Vn)*

First(β)
= {a属于Vt|β =>*a……}∪(if β=>*空 then {空}
else 空集)

首先我们要理解β它是一个串,这个串的组成是由终极符和非终极符的星闭包。它是针对于一个串而言的。

aD能推出若干个字符串,最后退出来的每个串的头一个终极符所组成的集合。就是first集了。

First(aD)
= {a}

串经过若干部推导,推导出若干串,所有这些串以终极符开头的,这些终极符都属于First(β)

Follow集的定义

设G = (Vt, Vn, S,
P)是上下文无关文法,2型文法,A∈Vn,S是开始符号

Follow(A) = {a∈Vt | S=>+……Aa……} U (if S => *……A
then {#} else 空集)

注意:我们需要注意到从开始符号推出的所有举行中有A的并且紧跟A的终极符的集合。

从开始符号出发,推出一个句型,这个句型中有A,所有跟在A后面的非终极符的集合,如果次句型中A位于最后一个符号,则Follow(A)包括{#}

Predict集的定义

     Predict(A→β) = 

  1. =
    First(β)     当First(β)不包含空
  2. =
    First(β) – 空 ∪ Follow(A)          当First(β)包含空 

注:Predict集是针对于一条规则而言的。而且我们的最终目的是为了求出Predict帮我们判断要选择那一条规则进行推导的。求出first和follow只是我们的手段而已。

 

计算first(X) 集(X是一个长度为1的符号,也就是分为终极符和非终极符)

     若X∈Vt,(即暗示长度为1且为终极符),则First(X) = {X}

若X∈Vn,(即暗示长度为1且是非终极符),则First(X) = {a|X→a……属于产生式P, a∈Vt}

若X属于Vn,且有产生式X→空,则空∈First(X)。

若X属于Vn,有产生式X→Y1Y2Y3……Yn,且Y1Y2……Yi∈Vn

     当Y1,Y2,Y3,……Yi=>*空(也就是隐含了Yi+1经过星闭包推不出空)

     则First(Y1) – {空},First(Y2)
– {空},……, First(Yi) – {空}都包含在First(X)中

     当Yi=>*空(i=1, 2, 3, ……, n),将空也并入First(X)中。(也就是从X推出的产生式规则右侧只有非终极符的序列,而且每个非终极符都可以推出空,则空包含在First(X))

设符号串α = X1X2X3……Xn

若α=空,则空属于First(α)

求First(Xi),i=1,2,……,n

若n = 1则First(X1) = First(α)

若n>=2,且j=1, 2, 3, ……, i-1,都有空属于First(Xj)则令所有(Xj)-{空}
都是First(α)的子集

若所有的X都能推出空,即都有空∈First(Xi),则空属于First(α)

 

 

计算Follow集(找出含有规则友部含有A的全部规则)

  1. 对开始符号S,{#}∈Follow(S)
  2. 有规则B→α1Abα2,b∈Vt,则b属于Fololow(A)(α1可空可不空,关键是A后main的额东西,这一种情况是说A后面是一个非终极符。)
  3. 对于一般情形,有规则B→α1Aα2
    
    First(α2)-{空}是Follow(A)的子集
  4. 若B→Aα或者是B→βAα,且α=>*空
    
    Follow(B)是Follow(A)的子集。

注:我们可以看出求Follow集合的时候我们是基于规则而言的,这是因为我们不可能找出所有举行来判断A后面的非终极符。而且对于规则B→α1Aα2而言,α1Aα2一定是在某一个句型中。只要使用B→α1Aα2规则,即α2的first集一定是Follow(B)的子集。

而Predict(A→β)的计算在求出First和Follow之后也就迎刃而解了。在此不赘述

 

 

 

 

 

 
				
时间: 2024-10-28 13:18:38

语法分析之自定向下语法分析概述与三个重要概念的集合的相关文章

自定向下分析Binder 之 Binder Model(1)

Java层的Binder对象模型: IBinder IBinder是Binder通信机制中的核心部分(Base interface for a remotable object, the core part of a lightweight remote procedure call mechanism designed for high performance when performing in-process and cross-process calls. ). This interfa

Linux操作系统的管理(虚拟机的概述)三

在我们了解linux操作系统之前我们首先要先知道虚拟机的运行架构,我们在初学linux的时候,如果在我们的真实PC上做操作你就会发现,你很多时候都是在重装系统的状态下,当然你也可以在linux操作系统上去装一个KVM虚拟机,不过你确定你要放弃windows操作系统吗?  所以为了让我们做实验的时候能够方便了解我们就把我们的linux操作系统乖乖的装在虚拟机上吧. 在使用虚拟机之前我们得先知道虚拟机是个什么工具,首先在我们当前这些X86平台上每个平台上只能运行一个,现在的服务器也是这种架构的多,在

蓝牙核心技术概述(三): 蓝牙协议规范(射频、基带链路控制、链路管理)

关键词:蓝牙核心技术协议射频基带链路控制链路管理作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误,共同学习.共同进步!!下载链接:Bluetooth PROFILE SPECIFICATIONS (基本涵盖所有蓝牙协议).buletooth core 2.1-4.0 SPECIFICATION(三蓝牙版本的核心协议v2.1\v3.0\v4.0).蓝牙核心技术与应用 马建仓 版(蓝牙协议相关初学者必读,开发者参考) 蓝牙核心技术概述(一):蓝牙概述蓝牙核心技术概

SQL Server 内存中OLTP内部机制概述(三)

----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory OLTP Internals Overview>:http://technet.microsoft.com/en-us/library/dn720242.aspx 译者水平有限,如有翻译不当之处,欢迎指正. ----------------------------我是分割线---------------

蓝牙核心技术概述(三): 蓝牙协议规范(无线电频率、基带链路控制、领汇管理)

关键词:蓝牙核心技术协议无线电频率基带链路控制链路管理作者:xubin341719(欢迎转载.请注明作者,请尊重版权.谢谢!)欢迎指正错误.共同学习.共同进步! !下载链接:Bluetooth PROFILE SPECIFICATIONS (基本涵盖全部蓝牙协议).buletooth core 2.1-4.0 SPECIFICATION(三蓝牙版本号的核心协议v2.1\v3.0\v4.0).蓝牙核心技术与应用 马建仓 版(蓝牙协议相关刚開始学习的人必读,开发人员參考) 蓝牙核心技术概述(一):蓝

此文记录了我从研二下学期到研三上学期的找工历程,包括百度、腾讯、网易、移动、电信、华为、中兴、IBM八家企业的面试总结和心得--转

感谢电子通讯工程的研究生学长为大家整理了这么全面的求职总结,希望进入通信公司和互联网公司做非技术类岗位的学弟学妹们千万不要错过哦~ ---------------------------原文分割线-------------------------- 此文记录了我从研二下学期到研三上学期的找工历程,包括百度.腾讯.网易.移动.电信.华为.中兴.IBM八家企业的面试总结和心得,希望能够帮助到正在找工的朋友和师弟师妹们,并纪念找工这段怀揣着希望和梦想,伴随着紧张和压力,同时令我受益匪浅的日子. (本文

四川大学线下编程比赛第三题:书本转移

好久没写过日志,也怪最近事情真的特别多,最近参加关于编程方面就是CSDN高校俱乐部举办的线下编程塞,说起这次编程赛,总共三道题,题目都可以在csdn高校俱乐部上看到,参加比赛的时候有点小紧张,第三题涉及到队列,当时的机器没有代码提示,坑...也怨自己平时写代码用惯了代码提示,很多stl的方法都是隐隐约约知道,但是具体的不知道,导致第三题没有做出来,遗憾哈!下面贴一下今天写的第三题的代码 题目 四川大学线下编程比赛第三题:书本转移 题目详情: 小强有 3 个箱子 A,B,C 用来装书,所有的书(一

碧桂园营销院长朱晓波-新常态下拉动业绩的三驾马车-业务链、人才链、文化链标杆房企的顶层设计解码

新常态下拉动业绩的三驾马车-业务链.人才链.文化链标杆房企的顶层设计解码课程背景:2015年房地产榜单已经揭晓,万科以2600亿的成绩继续领跑:恒大以49%的增长成为最大黑马:TOP100房企的入榜门槛为104亿元,同比增长48%.恒大海花岛以日销售122亿的世界纪录成为年度神盘.一连串的数据显示白银时代不缺赚钱效应,新常态下依旧演绎强者恒强的逻辑.数字背后留下的是一连串的思考:标杆房企跨越式的业绩增长是如何形成的?支撑这种增长的背后动因是什么?成功的关键因素是什么?标杆房企的内在基因是什么?究

linux下查看uuid的三种方法及使用uuid的作用

查看设备的uuid的三种方法,总结如下: 1 命令查看:blkid2 文件查看:ls -l /dev/disk/by-uuid3 命令查看:vol_id /dev/sda1 UUID的作用及意义 1:它是真正的唯一标志符 UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的.如果你在系统中启动的时候,使用盘符挂载时,可能找不到设备而加载失败,而使用UUID挂载时,则不会有这样的问题. 2:设备名并非总是不变的 自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺