• 文法和语言总结与梳理


    1. 梳理第二章的内容,写一篇理解与总结。

    答:

    (1)文法的类型有:0型文法、1型或上下有关的文法、2型的或上下无关的文法、3型文法或正规文法

    ①0型文法又称为短语文法,设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而 β∈(VN∪VT)*,则G是一个0型文法。0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任 何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文 法。

    ②1型文法也叫上下文有关文法,此文法对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。
    注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
    如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。

    ③2型文法也叫上下文无关文法,它对应于下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。 如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。

    ④3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。 如有:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导 为:A->ab,A->aB,B->a,B->cB或推导 为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。具体的说,例子 A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结 符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为 B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算 3型文法。

    ⑤0型文法(type 0 grammar)形式文法的一种类型.在形式文法分类中泛指任何文法.1型文法是0型文法的子类,2型文法是1型文法的子类,3型文法是2型文法的子类.

    (2)规则(重写规则、产生式、生成式)是形如A→B(A::=B)的(A,B)有序对。文法G定义为四元组(Vn,VT,P,S)VN:为非终结符(语法实体,或变量)集,常用大写字母表示;VT:为终结符,常用小写字母表示;P:为规则的集合,规则的左边属于V并且至少包含一个非终结符;S:为识别符或是开始符,是一个非终结符,至少要在一条规则中作为左部出现。推导是正向推导,归约是逆向推导。

    (3)语法树:是描述上下文无关文法句型推导的直观工具。语法树的定义:设G=(VN,VT,P,S)为一上下文无关文法,若一棵树满足下列4个条件,则此树为G的语法树(推导树)  :①每个结点都有一个标记,此标记是V的一个符号②根的标记是S③若一结点n至少有一个它自己除外的子孙,并且有标记A,则肯定A∈VN④如果结点n的直接子孙从左到右依次为n1,n2,…,nk,并且标记分别为A1,A2,…,Ak,那么A→A1A2…Ak  一定是P中的一个产生式。

    2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)

    整数n

    标识符i

    表达式e

    条件语句

    赋值语句

    复合语句

    函数

    程序

    ...

    答:

    整数n   文法:<n>::=<integer>

    标识符i  文法:<i>::=<id>

    表达式e

                文法:<e>:=[+|-]<项>{<加减运算符><项>}

               <项>::=<因子>{<乘除运算法><因子>}

               <加减运算符>::=+|-

    条件语句    文法:<条件语句>::=if<条件>then<语句>

    赋值语句     文法:<赋值语句>::=<id>:=<表达式>

    复合语句     文法:<复合语句>::=begin<语句>{;<语句>} end

    函数      文法:<函数>::=function <id>() :

    程序   文法:<程序>::=<分程序>.

  • 相关阅读:
    VirtualBox下Linux扩展磁盘空间
    idea 2019.3 svn 忽略文件/目录
    CentOS7添加/删除用户和用户组
    查看LINUX进程内存占用情况及启动时间
    Linux定时自动备份oracle数据库
    oracle11g数据库导入导出方法教程以及导出表不全解决
    ubuntu12下安装unixODBC(mysql)
    oracle登录管理员创建数据库和表空间
    centos7 64运行32位程序
    Windows下搭建Redis集群
  • 原文地址:https://www.cnblogs.com/kushoulder/p/11599369.html
Copyright © 2020-2023  润新知