zoukankan      html  css  js  c++  java
  • 2.4语法推导树

    什么样的树称为语法推导树。学会写语法推导树。从语法推导树中求

    语法树的每一个结点都有一个标记,而且这个标记是V的一个符号。文法的表示是:G={VN,VT,P,S}.V包括了文法的VN和VT.也就是说这个标记肯定是一个终结符或者是一个非终结符。每一个结点都是。

    根结点标记肯定是S。S一般是代表开始符,根结点是S。

    非根结点的标记都要是VN或者是VT里面的元素/符号。

    VN是非终结符集。语法树中能够表现出有推导的肯定是在非终结符当中。终结符肯定是没有子树的。只有非终结符才有子层结点。

    有一个结点S,它有直接子孙/孩子结点T、a、b。把T、a、b按顺序排列下来,S->T、a、b。这个推导式S->T、a、b肯定是P中的产生式,文法的产生式。

     


    看看语法推导树符不符合定义。语法推导树的每一个结点都有一个标记。而且这些标记必须是在V当中的。因为文法G=({a,b},{S,A},S,P}),VT={a,b}是终结符集,VN={S,A}是非终结符集,都是属于V当中的字符的。

    所以定义的第一条就符合了。每一个结点a,b,S,A都是文法中V集合的元素。

    定义的第二条是根的标记为S。

    第三条是如果结点n至少有一个它自己除外的子孙,结点它有除自己以外的子孙。那么这个结点肯定在VN中。也就是说这个结点肯定是非终结符。大写的A它是一个非终结符。一个结点它有多个直接子孙,把那些直接子孙排列起来,比如

    A->S、b、A。这个式子应该是要出现在文法当中的。文法当中的推导式。就看这个文法推导式有没有A->S、b、A。所以这棵语法树是合法的。


    下面再看如何构造一棵语法推导树。

    接着就是根据句型,根据句型的特点来构造推导树。句型是aabAa,我们的推导是从根结点S开始的。

    S->a;a是终结符,显然不符合要求,因为句型有aabAa这么长一串句型。那么第一步构造推导树就只能是选择S->aAS。

    第二步:接下来匹配abAa。接下来选择合适的A了。A->ba显然不合要求。那么就在A->SbA和A->SS中选择一个。A->SbA刚好是和句型的bA部分匹配的。右边的S可以推出a和句型匹配。A的直接子树S也可以推出a。最终生成的语法树就和我们的句型完全匹配了。


    怎么根据语法树得到句型呢?

    顺次地把叶子结点写出来。就是aabAa。

    这就是语法树的构造/推导.


    这棵句子的推到树。这棵推导树当中哪一些成分是这一个句子的短语。哪一些又是它的简单短语。其实有了推导树要求短语是非常容易的。短语其实就是推导树中任意一棵子树的所有叶子结点的序列。任意一棵子树它的所有叶子结点的序列。那我们就任意的找一棵子树:A->a1.a1就是一个短语。S->A->a2和S->a3也是一棵子树,它的叶子结点有a2、a3,所以a2、a3是一个短语。同时这一棵子树中间又有一棵小树:A->a2也是一棵小的子树,所以a2又是一个短语。对于B这一棵子树,它有ε、b1、b2这三个叶子结点。ε、b1、b2也是一个短语。哪些是直接短语呢?直接短语也很好求。按照规则A→b,A直接推出b,b就是一个直接短语。那么这里A->a1,A直接推出a1,所以a1就是一个直接短语。S->ε,S直接推出ε,ε就是一个直接短语/简单短语。B->b1,B直接推出b1,b1也是一个直接短语。B->b2,B直接推出b2,b2也是一个直接短语。A->a2,A直接推出a2,a2也是一个直接短语。

    那么需要思考的是S->a3,a3是不是一个直接短语?a3实际上不是直接短语而且它甚至不是短语。因为a3只是S推导的一个部分而已,而不是全部。如果说S->a3(S直接推出a3),那么a3是一个直接短语。

    句柄就是整个这一棵语法树当中最左边的子树它的结点。而且它要求一定要是最左边的简单短语。所以这棵语法树当中a1是句柄,因为它处于最左,同时它也是简单短语。所以a1是句柄。这个是语法推导树。

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6931702.html
Copyright © 2011-2022 走看看