2.5.1 推导和语法树

2.5.1 推导和语法树

1. 语法树的生成

对句型的推导过程给出一种图形表示,这种表示称为语法树,也称推导树。设文法G = ( V N , V T , P , S ),对 G 的任何句型都能构造与之关联的、满足下列条件的一棵语法树。

(1 )每个结点都有一个标记,此标记是 V = V N ∪ V T ∪ { ε }中的一个符号。

(2 )树根的标记是文法的开始符号 S 。

(3 )若某一结点至少有一个分支结点,则该结点上的标记一定是非终结符。

(4 )若 A 的结点有 k 个分支结点,其分支结点的标记分别为 A 1 , A 2 ,…, A k ,则 A →A 1 A 2 … A k 一定是 G 的一条规则。

下面用一个例子来说明根据句型的推导构造语法树的过程。

例如,设有文法 G [ E ]:

E → E + T | E - T | T
T → T * F | T / F | F
F → ( E ) | i

根据推导,画出句型(T + i ) * i - F 的语法树。
首先给出句型的推导过程(最右推导):

E ⇒ E - T ⇒ E - F ⇒ T - F ⇒ T * F - F ⇒ T * i - F
⇒ F * i - F ⇒ ( E ) * i - F ⇒ ( E + T ) * i - F
⇒ ( E + F ) * i - F ⇒ ( E + i ) * i - F
⇒ ( T + i ) * i - F

推导构造语法树的过程是:
以识别符号作为根结点,从它开始对每一步直接推导向下画一分支,分支结点的标记是直接推导中被替换的非终结符的名字,按此方法逐步向下,画出每一步直接推导对应的分支直到对该语法树再无分支可画出时,构造过程结束。构造句型(T + i ) * i - F 的语法树的过程,见图 2.2 。

语法树中从左到右的末端结点构成了由该语法树所表示的那个推导推出的符号串,如上例(T + i ) * i - F 。所谓末端结点,是指没有分支向下射出的结点,常称之为树叶如果末端结点都是由终结符组成,则这些结点所组成的符号串为句子,否则为句型

由上例可知,语法树的构造过程是从文法的开始符号出发,构造一个推导的过程,因为文法的每一个句型(句子)都存在一个推导,所以文法的每个句型(句子)都有一棵对应的语法树。
对句型(T + i ) * i - F ,还可给出最左推导:

E ⇒ E - T ⇒ T - T ⇒ T * F - T ⇒ F * F - T
⇒ ( E ) * F - T ⇒ ( E + T ) * F - T ⇒ ( T + T ) * F - T
⇒ ( T + F ) * F - T ⇒ ( T + i ) * F - T
⇒ ( T + i ) * i - T ⇒ ( T + i ) * i - F

不难看出,根据该推导得到的语法树,仍然是图 2.2 。可见对句型( T + i ) * i - F 的两种不同推导构造的语法树完全相同,也就是说,一棵语法树表示了一个句型的种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。为方便找到句型短语和句柄,我们需引入子树和简单子树的概念。

2. 子树

语法树的子树是由某一非末端结点连同所有分支组成的部分。例如,图 2.3 是图 2.2 的子树。

3. 简单子树

语法树的简单子树是指只有单层分支的子树。例如,图 2.4 是图 2.2 的简单子树。

在这里插入图片描述
子树与短语的关系十分密切,根据子树的概念,句型的短语、直接短语和句柄的直观解释如下:
短语 ——— 子树的末端结点形成的符号串是相对于子树根的短语
直接短语 ——— 简单子树的末端结点形成的符号串是相对于简单子树根的直接短语
句柄 ——— 最左简单子树的末端结点形成的符号串是句柄

例如,对前例文法 G [ E ],用语法树求句型( T + i ) * i - F 的短语、直接短语和句柄。
首先画出该句型的语法树,如图 2.2 所示,由语法树可知:
(T + i ) * i - F 为句型的相对于 E 的短语;
(T + i ) * i 为句型的相对于 T 的短语;
(T + i )为句型的相对于 F 的短语;
T + i 为句型的相对于 E 的短语;

T 为句型的相对于 E 的短语,且为直接短语;
第一个 i 为句型的相对于 F 的短语,且为直接短语;
第二个 i 为句型的相对于 F 的短语,且为直接短语;
F 为句型的相对于 T 的短语,且为直接短语;
在 4 个直接短语中, T 为句柄。

【例 2.14 】对例 2.13 中的文法,可用语法树非常直观地求出句型 baSb 的全部短语、直接短语和句柄。
分析 首先根据句型 baSb 的推导过程画出对应的语法树,见图 2.5 。
在这里插入图片描述

由语法树可知:
baSb 为句型的相对于 S 的短语;
ba 为句型的相对于 A 的短语;
a 为句型的相对于 B 的短语,且为直接短语和句柄;
Sb 为句型的相对于 B 的短语,且为直接短语。

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: libseccomp 2.5.1是一个开源的软件包,用于在Linux操作系统上实现系统调用过滤。它的目的是提供一种安全机制,限制应用程序对系统调用的访问,以减少可能的安全漏洞和攻击表面。 libseccomp 2.5.1使用了一种叫做“seccomp”的内核特性,该特性可以通过过滤系统调用来限制应用程序的权限。通过使用libseccomp 2.5.1,开发者可以定义一个安全策略,仅允许应用程序访问特定的系统调用,从而避免不必要或潜在危险的操作。 与其他类似的工具相比,libseccomp 2.5.1具有较为简洁和高效的设计。它提供了易于使用的API,方便开发者定义和管理系统调用策略。通过配置一组规则,开发者可以指定允许的系统调用和参数,并为其设置允许或拒绝的动作。 使用libseccomp 2.5.1可以提供一定程度的安全性,特别是在运行不受信任的应用程序时。通过限制应用程序的系统调用能力,可以减少潜在的攻击面,并提高系统的整体安全性。 总之,libseccomp 2.5.1是一个功能强大的开源软件包,它提供了一种有效的机制来限制应用程序对系统调用的访问。通过使用libseccomp 2.5.1,开发者可以增加应用程序的安全性,并减少潜在的攻击风险。 ### 回答2: libseccomp是一个开源的软件项目,旨在为Linux系统提供安全和隔离机制。libseccomp 2.5.1是libseccomp项目的一个特定版本。 libseccomp 2.5.1主要提供了一个用于开发者的用户空间库,用于与Linux内核的seccomp过滤器系统进行交互。seccomp是Linux内核中的一个子系统,用于限制进程的系统调用访问。通过seccomp,开发者可以以一种更细粒度的方式控制进程对系统调用的访问,从而提高应用程序的安全性和可靠性。 libseccomp 2.5.1版本相较于之前的版本有一些改进和升级。它修复了一些已知的问题、缺陷和漏洞,提高了整体的稳定性和安全性。该版本还引入了一些新的功能和API,使开发者可以更灵活地使用seccomp过滤器系统。 使用libseccomp 2.5.1,开发者可以通过编程方式定义和加载seccomp过滤器规则,限制进程对指定系统调用的执行。这在某些情况下很有用,例如,限制进程对敏感系统调用的访问,从而减少潜在的安全风险。libseccomp提供了一套简单直观的API,使开发者能够轻松地实现这些安全策略。 总之,libseccomp 2.5.1是一个开源项目,它提供了一种简单而有力的机制来增加Linux系统的安全性和隔离性。开发者可以使用libseccomp库与Linux内核的seccomp过滤器系统进行交互,以控制进程的系统调用访问,从而提高应用程序的安全性和可靠性。 ### 回答3: libseccomp 2.5.1 是一个开源的 Linux 库,用于实现沙盒安全机制。它通过对进程的系统调用进行过滤和限制,提供了一种保护应用程序免受恶意代码和攻击的方法。 libseccomp 2.5.1 提供了一种可编程的接口,使开发者能够指定要允许或禁止的系统调用。可以通过设置规则来限制应用程序对特定系统调用的访问,从而减少潜在的安全风险。这些规则可以基于进程的 UID、GID、基于网络的规则,或者是自定义的规则。 此外,libseccomp 2.5.1 还提供了一组默认的规则,用于限制一些常用的风险系统调用。该库还支持动态加载和卸载规则,使得管理员可以根据需要对系统调用进行实时调整。 通过使用 libseccomp 2.5.1,可以减少应用程序受到的攻击面,提高安全性。它可以防止应用程序执行危险的系统调用,避免潜在的漏洞被利用。 总之,libseccomp 2.5.1 是一个功能强大的库,为开发者提供了一个可靠的方法来实现沙盒机制,以提高应用程序的安全性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值