zoukankan      html  css  js  c++  java
  • 作业四——文法和语言总结与梳理

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

    1、计算机的语言同中英文一样,都有自己独有的语法和规律,一定的规则可以判别句子结构合法与否,用这些规则描述句子的结构,这样的语言就是文法。是利用有限的集合(文法)来刻画无穷的集合(语种生成的句子)的一个工具。

      正如汉语构成句子=主语+动词+谓语等汉字或者词组成语

      程序设计语言句子=自己的符号+符号串

      字母表是非空有限集合,所以字母表中的元素也成称为符号,字母表中的符号组成的任何有限序列称为符号串,符号串的顺序很重要,允许空符号串,用ε表示。符号串的运算一定要注意其顺序。

    2、规则(重写规则、产生式、生成式)是形如A→B(A::=B)的(A,B)有序对。

      文法G定义为四元组(Vn,VT,P,S)

      VN:为非终结符(语法实体,或变量)集,常用大写字母表示;

      VT:为终结符,常用小写字母表示;

      P:为规则的集合,规则的左边属于V并且至少包含一个非终结符;

      S:为识别符或是开始符,是一个非终结符,至少要在一条规则中作为左部出现。

      推导是正向推导,归约是逆向推导。

    3、文法的类型:

    文法分为四种类型,0型、1型、2型、3型。

    文法类型

    又称

    结构或定义

     

    例子

    0型文法

    短语文法

    α∈(VN∪VT)*,且至少含一个VN,而β∈(VN∪VT)*

    对产生式没有任何限制

    S->A

    1型文法

    上下文有关文法

    若任一产生式α→β,都有|β|≥|α|,仅仅S→ε除外,产生式的形式描述:α1Aα2→α1βα2,A必须出现在上下文中才允许用β替换。

    产生式的左边不止一个符号,但必须至少有一个非终结符

    aSb->aaSbb

    S->ab

    2型文法

    上下文无关文法

    对任一产生式都有α∈VN,β∈(VN∪VT)*

    每个产生式左边只有一个终结符

    G[S]:

    S→01

    S→0S1

    3型文法

    正规文法

    产生式的形式是A→aB或者是A→a

    左边只有一个终结符,右边为一个非终结符或是一个非终结符加一个终结符

    G[S]:

    S→a

    S→aB

    4、语法树

      给定文法G=(VN,VT,P,S),语法树的根为S,每个结点都有一个标记,是V的一个符号。

      在推导的任何一步α=>β,其中α、β是句型,都是对α最左非终结符进行替换,则为最左推导;若是对α最右非终结符进行替换,则为最右推导,也称之为规范推导

      如果一个文法存在某个句子对应两颗不同的语法数,则这个文法是二义的。

      句型:语法树从左至右的一个序列;

      句子:语法树从左至右终结符序列,是句型中的一个;

      语言:由文法产生的所有句子的集合;

      短语:某子树的末端节点按自左向右顺序为句型的符号串,该符号串为该句型相对于该子树跟的短语;

      简单短语:语法树的简单子树的叶子结点从左到右排列构成一个简单短语;

      句柄:最左的简单短语。

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

    整数n

      n->0|1|2|3|……|8|9

    标识符i

      i->a|b|c|……|y|z|A|B|C|……|Y|Z

    表达式e

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

      <项>-><因子>{<乘除运算符><因子>}

      <因子>->i|n|’(‘e’)’

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

      <乘除运算符>*|/

    条件语句

      stmt->if<条件>then<语句>

      <条件>->e<关系运算符>e|odd e

      <语句>-><赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空语句>

      <关系运算符>->==|#|<|<=|>|>=

    赋值语句

      i=e

    复合语句

      stmt->begin <语句>{;<语句>} end

      <语句>-><赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空语句>

    函数

      <函数>-><主函数><其他函数>|<主函数>

    程序

      <程序>-><分程序>

      <分程序>-><常量说明部分><语句>|<变量说明部分><语句>|<过程说明部分><语句>

      <常量说明部分>->const<常量定义>{,<常量定义>};

      <变量说明部分>->var i{,i};

      <过程说明部分>-><过程首部><分程序>{;<过程说明部分>};

      <过程首部>->procedure i;

      <语句>-><赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空语句>

      <过程循环语句>call i

      <当型调用语句>->while<条件>do<语句>

      <读语句>->write’(‘e{,e}’)’

      <写语句>->read’(‘i{,i}’)’

      <空语句>->ε

  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/cyxxixi/p/11588652.html
Copyright © 2011-2022 走看看