语法分析树(先看例子再看定义)

语法分析树(先看例子再看定义)

先讲例子

书上讲问题,先讲定义,一顿学术操作,让人云里雾里,然后出例子。其实这样往往让人觉得看书的过程就是放弃的过程。

关于语法分析树,我先从上篇文章的例子讲起。

书接上回,9-5+2的产生式表达为

list -> list + digit | list - digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9

对应于语法分析树,首先把表达式作为写在树的最下面

9 - 5 + 2

然后从底往上构建语法表达树,首先看99digit,因此9可以表示为

 digit|9

-list->list-digit的中间部分,因此-的语法表达式部分为

     list/  |  \
list  -  digit

然后是55digit,且5-后面的字符,对应于上面的语法树,直接放在digit下面

        list/ | \/  |  \list |  digit|    |-    5

这个时候可以看到左侧的list没有放任何东西,我们试着看看能不能把9对应的语法树部分放上去?

         list/  |  \/   |   \list  -  digit|         |     digit       5|    9    

我们发现在产生式

list -> digit

list可以具有形式如digit。也就是二者是等价关系,上述图是可以的。然后一次类推。最后形成图如下。

在这里插入图片描述

再看定义

定义

如果非终结符A有一个产生式A->XYZ,那么在语法分析树种就可能有一个标号为A的内部结,该结点有3个子结点,从左到右标号分别为X、Y、Z。

如图

在这里插入图片描述

即:给定一个上下文无关文法,则该文法就有一颗语法分析树(parse tree)

语法分析树的性质

  1. 根节点的标号为文法的开始符号。比如list

  2. 每个叶子结点的标号为一个终结符号或ee为空集。

    比如9-5形成的语法分析树

            list/  |  \/   |   \list  -  digit|         |     digit       5|    9   
    

    可以看到叶子结点分别为9,-,5,对于子树

     digit|9
    

    而言。可以看到digit非终结符作为根节点,9作为叶子结点,那么依据语法分析树的定义A->XYZ可知,YZ都是空集。

  3. 每个内部结点的标号是一个非终结符号

    即,除了叶子结点之外都必须是非终结符

  4. 如果非终结符号A是某个内部结点的标号,并且它的子结点的标号是从左至右分别是X1,X2,X3,...,Xn,,那么必然存在产生式A->X1X2X3...Xn。其中,X1,X2,X3,...,Xn既可以是终结符号,也可以是非终结符号。

    例如

            list/  |  \/   |   \list  -  digit|         |     digit       5|    9   
    

    list->list-digit中产生式右部listdigit就是非终结符

    另一个需要注意的方面

    作为一个特殊情况,如果A->e是一个产生式,那么一个标号为A的结点可以只有一个标号为e的子结点。
    

有关术语

对于术语(term),我更喜欢用英文表述,因为有些书翻译成中文的时候词不达意(本人雅思7分,口语单项8分)。

在这里插入图片描述

  • 语法分析树相关的术语
英文中文备注
node结点
label标号list,digit等
root最上面的list
parent父结点叶子结点以外的结点
child子结点父结点的下级
sibling兄弟节点同一父结点下的同级结点。sibling是兄弟姐们的意思
leaf叶子结点没有子结点的结点称为叶子结点
interior node内部结点有一个或多个子节点的结点
descendant后代节点N的后代要么是N本身,要么是N的子结点
ancestor祖先结点M是结点N的后代,那么N是M的祖先
yield结果一颗语法树的叶子结点从左到右构成了树的结果。在上述的例子中就是9-5+2
  • 语法分析

为一个给定的终结符号串构建一颗语法分析树的过程称为对该符号串进行语法分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言正函数nosign,C语言标准库函数查询手册.docx

球锣宜软瘠旱塾3abort功能异常终止程序头文件StdIib.h语法VOid abort(void);abs功能整数的绝对值头文件StdIib.h语法int abs(int: j);返回值整数j的绝对值。如果不能表示J的绝对值,那么函数的行为是未定义的。absread功能读磁盘绝对扇区函数头文件dos ? h语法int a…

spring 实例化bean的几种方法

1.普通的通过构造函数初始化&#xff0c;没有指定构造函数参数的就是用默认的无参的构造方法 <bean id"exampleBean" class"examples.ExampleBean"/><bean name"anotherExample" class"examples.ExampleBeanTwo"/> 构造函…

middle函数C语言,C语言函数调用栈(三)

6 调用栈实例分析本节通过代码实例分析函数调用过程中栈帧的布局、形成和消亡。6.1 栈帧的布局示例代码如下&#xff1a;//StackReg.c#include //获取函数运行时寄存器%ebp和%esp的值#define FETCH_SREG(_ebp, _esp) do{\asm volatile( \"movl %%ebp, %0 \n" \"…

c语言多个形参,C中子函数最多有几个形参

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼C89 31个&#xff0c;C99 127个。ANSI C892.2.4.1 Translation limitsThe implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following lim…

什么叫ERP软件

1.ERP是什么&#xff1f; erp是个管理系统&#xff01;是一个成套的统称&#xff01;构成&#xff1a;进销存BOM生产MRP质检(IQC/FQC/PQC)车间日报/简单排产应收应付固定资产实际成本算法自动财务。就是通过软件管理&#xff0c;实现最小的库存和最大的利益&#xff01; 2.什么…

android 杀 服务器,android busybox httpd搭建简单web服务器

安卓手机利用busybox中的httpd命令可以创建一个简单的web服务器。我们可以在终端模拟器中输入一下命令查看httpd的使用帮助。busybox httpd --help1|u0_a84cancro:/ $ busybox httpd --helpBusyBox v1.20.2-MIUI (2012-08-20 20:59:32 CST) multi-call binary.Usage: httpd [-i…

sublimeclang里面使用相对路径

在sublime的project里面&#xff0c;可以添加sublimeclang的options,比如这样 {"folders":[{"path": "/C/EverBox/gitCode/clangxx"}],"settings": {"sublimeclang_options": ["-Wall","-IC:\\EverBox\\gitC…

短信恢复 android,苹果手机短信恢复:安卓+苹果手机短信恢复教程,必须收藏!...

原标题&#xff1a;苹果手机短信恢复&#xff1a;安卓苹果手机短信恢复教程&#xff0c;必须收藏&#xff01;手机短信怎么恢复&#xff1f;日常生活中&#xff0c;大家或多或少会不小心把删除一些不必要的短信&#xff0c;比如注册某软件的验证码的短信&#xff0c;面试通知地…

Shell应用:批量将文件编码由gbk转utf-8

Shell应用&#xff1a;批量将文件编码由gbk转utf-8,实例代码&#xff1a; [plain]#!/bin/bash // batch_change_GB2312_to_UTF-8 cd directory find ./ -type f -name "*.java" | while read line;do echo $line iconv -f GB2312 -t UTF-8 $line > ${lin…

c语言立体图像编程,C语言-编程实例-三视图的画法

#includeint dx[12]{0,60,60,0,0,60,60,0,60,0,60,0}; /*确定组合体X坐标*/int dy[12]{0,0,120,120,0,0,40,40,80,80,120,120};/*确定组合体Y坐标*/int dz[12]{0,0,0,0,80,80,80,80,40,40,40,40};/*确定组合体Z坐标*/int ld[24]{0,1,2,3,0,4,5,6,7,4,10,11,9,8,10,2,3,11,8,6,9…

【js拾遗】名称空间

function NameSpace(ns) {if (!ns) {return null;}var arr ns.split(.);//第一次调用的时候window.utry的值为{};//第二次调用的时候window.utry的值为window.utry;window[arr[0]] window[arr[0]] || {};//obj是window.utry的引用var obj window[arr[0]];//result也是window…

Linux编程简介——VI

VI是Linux/Unix下标配的一个纯字符界面的文本编辑器。由于不支持鼠标功能&#xff0c;也没有图形界面&#xff0c;相关的操作都要通过键盘指令来完成&#xff0c;需要记忆大量命令。因此很多人不大喜欢它&#xff0c;但同时由于键盘的方式往往比鼠标来得快&#xff0c;一旦熟练…

xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...

使用tabbedpage时将安卓端导航放在底部,官网也有说明方法.总结:xmlns"http://xamarin.com/schemas/2014/forms"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local"clr-namespace:aya"x:Class"aya.MainPage"xmlns:and…

算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)...

定义&#xff1a;给定一个数的序列H0,H1,…,Hn,…若存在整数n0&#xff0c;使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hn(0i<n)联系起来&#xff0c;这样的式子就叫做递推关系。 递推关系中存在着三大基本问题&#xff1a;如何建立递推关系&#xff0c;已…

android广播第三方库,Android Support 库:LocalBroadcastManager

在介绍完 Android Support 库发展历程(http://blog.chengyunfeng.com/?p1047)后&#xff0c; 再分别介绍下 Android Support 库中有用但是被忽略的一些功能。了解这些功能&#xff0c;在需要的时候可以避免在引入其他类似的第三方库或者避免自己重复制造轮子&#xff0c;提高开…

2012年总结

2012年是一个特别的年头。 这一年&#xff0c;我的准研究生生活和研究生生活加起来已经一年了。最近在进行期末考试&#xff0c;自己也对自己这一年的经历进行一下总结&#xff0c;留在研一结束的时候对照一下。 自己在保研的时候不是很顺利&#xff08;主要是能力不足&#xf…

android 7调用摄像头,Android调用摄像头拍照(兼容7.0)

【实例简介】Android调用摄像头拍照(兼容7.0)Demo&#xff0c;原博客文章https://blog.csdn.net/u010356768/article/details/70808162【实例截图】【核心代码】4dc3b10b-51e5-4d8e-aff6-806753f897c7└── Camera├── app│ ├── app.iml│ ├── build.gradle│ …