编译原理(七) 之 CFG的分析树

简介: 编译原理(七) 之 CFG的分析树

CFG分析树

G: 
   ① E -> E + E,
     ② E -> E * E,
     ③ E -> -E
     ④ E -> (E),
     ⑤ E -> id

根节点的标号为 文法开始符号

内部节点表示对一个产生式A -> β 的应用,该节点的标号就是此产生式的左部A, 该节点的子节点的标号从左到右构成了产生式的右部β

上图中分析树的根节点就是③, ③的左部构成了产生树的根节点, 右部则是树的子节点, 然后依次往下进行分解,就够成了分析树

叶节点的标号既可以是非终结符,又可以是终结符,从左到右排列叶节点得到的符号串就是这棵树的产出 或者边缘

分析树是推导的图形化表示

给定一个推导S => a1 => a2 => …=> an, 对于推导过程中得到的每一句子ai ,都可以构造出一个边缘为ai 的分析树


例:

E => -E => - (E + E) => - (id + E) => -(id + id)


(句型的) 短语

给定一个句型,其分析树的每一颗子树的边缘称为该句型的一个短语(phrase)

如果子树只有父子两代节点, 那么这棵树的边缘称为该句型的一个 直接短语

如上的分析树中

- (E + E) 就是一个短语

(E + E) 也是一个短语

E + E 也是一个短语,并且是 直接短语,因为子树是2层


直接短语一定是某产生式的右部,某产生式的右部, 不一定是直接短语


二义性文法

如果一个文法可以为某个句子生成多颗分析树, 则称这个文法是二义性的


文法:

S -> if E then S
     if E then S else S
     other

句型:

if E1 then if E2 then S1 else S2

产生如下分析树, 由于 后边的 else既可以根最前边的if 匹配,又可以跟中间的if匹配,所以就产生了歧义,也就产生了两颗分析树

其实大多数编程语言都规定 else 跟 最近的尚未匹配的 if 来进行匹配,这样的话就会消除歧义,那么第一个分析树就是对的


对于任意一个上下文无关文法, 不存在一个算法,判断他是否有二义性, 只能通过给定的一组充分条件, 满足这个组充分条件的文法就是无二义性.

满足充分条件则是无二义性, 不满足条件也不一定有二义性.


相关文章
|
8月前
|
人工智能 弹性计算 自然语言处理
2026年阿里云部署OpenClaw(Clawdbot)一键接入WhatsApp喂饭级教程
2026年,OpenClaw(前身为Clawdbot、Moltbot)凭借开源轻量化架构、跨平台无缝适配能力及强大的AI自动化执行功能,成为个人、跨境团队及中小企业搭建专属AI助手的首选工具。其核心优势在于无需复杂开发,即可快速对接WhatsApp等全球主流通信平台,实现“WhatsApp发送自然语言指令→阿里云服务器运行OpenClaw执行任务→结果实时反馈至WhatsApp”的闭环,适配跨境沟通、客户服务、远程协作、日常办公等多场景,彻底打破“AI工具与日常沟通脱节”的痛点。
1008 5
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
10月前
|
安全 数据挖掘 API
如何快速识别游戏安全运营中外挂与多开用户?
IP是反外挂与多开治理的核心信号,贯穿账号、设备与行为。本文从工程视角出发,结合可运行代码,详解IP在风控中的关键作用:识别网络特征、构建聚类模型、集成主流IP数据库(如IP数据云、IPinfo),并提供可落地的IP风险评分方案,助力游戏安全体系实现高效防御。(238字)
|
自然语言处理 Java 程序员
编程小趣文:Python与Java名字的起源由来
编程小趣文:Python与Java名字的起源由来
659 1
编译原理----0型,1型,2型,3型文法
编译原理----0型,1型,2型,3型文法
992 1
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
5143 3
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
847 4
|
存储 内存技术
|
运维 监控 网络协议
IP 地址是什么,有什么用,通俗易懂答案?
**IP地址是互联网上设备的唯一标识,分为IPv4(32位,如192.168.1.1)和IPv6(128位,如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IP地址用于定位设备、数据包传递、网络安全和管理。分为公有(全球唯一)和私有(局域网内使用)IP,以及动态(DHCP分配)和静态(固定不变)IP。IP管理由ICANN和区域机构负责。了解IP地址基础知识对网络理解和故障排查至关重要。**
5531 3
★色盲悖论正解!
假设:有一个人,他有一种奇怪的色盲症。他看到的两种颜色和别人不一样,他把蓝色看成绿色,把绿色看成蓝色。   但是他自己并不知道他跟别人不一样,别人看到的天空是蓝色的,他看到的是绿色的,但是他和别人的叫法都一样,都是“蓝色”;小草是绿色的,他看到的却是蓝色的,但是他把蓝色叫做“绿色”。
6575 0