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

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

     答:第二章内容有7小节,分别是:

      (1)文法的直观概念  (2)符号和符号串  (3)文法和语言的形式定义  (4)文法的类型

      (5)上下文无关文法及其语法树  (6)句型的分析  (7)有关文法实际应用的一些说明

      在文法的概念中我们可以知道,文法是描述语言规则的形式规则。即由一些符号组成的一个有含义的句子的规则或协议。其中,使用EBNF来表示这种句子的构成规则,通常是按照一组规则去推导或者产生句子,比如“我是大学生”,按照了EBNF中的<句子> : : = <主语> <谓语>、<主语> : : = <代词> <名词>、<代词> : : = 我 | 你 | 他 等来表示产生的过程。

      文法中最常用的是上下文无关文法,即不关联上下文就能够推导出结果的过程。其中,想要形成上下文无关文法,还需要“配件”的组成。在文法中,字母是源头“配件”,由字母形成的各式各样的表达式能够推导出最后的规则。接下来详细说明我所理解的文法。字母是符号的集合,语言是字符串的集合,符号可以随机组合成字符串,字符串代表的单词符号可以进而形成表达式,语句又由表达式构成,最后在程序中作为程序块将完整程序展示出来。如下图所示:

      

       流程图中的“单词符号——>表达式——>语句——>程序块——>程序”即上下文无关文法。实用型文法,不需要上下文关联就能够推导出最后的结果。

       规范上来说,文法G定义为四元组(VN, VT, P, S)。其中,VN为非终结符(或语法实体、或变量);VT为终结符集;P为规则的集合,即由一开始的推导一直推导n次之后产生的规则,且当中至少包含一个非终结符。VN、VT和P都是非空有穷的集合。S是开始符,也是一个非终结符,至少有一条规则的左部要出现它。

      在前面我写了上下文无关文法,其实这只是文法类型当中的一种,也是最容易、最省时的文法,因为不需要与上下文挂钩即可进行文法规则推导。文法类型还包括了0型文法(也称为短文法)、1型文法(上下文有关的)、2型文法(上下文无关的)以及3型文法(正规文法)。需要明确的是,2型文法并不能说是3型文法,但3型文法却是2型文法。

      在文法中,如果想要直观分析推导出结果,那么语法树是必不可少的对象。语法树又称为分析树,顾名思义是用于文法中起分析作用的。在推导过程产生的图形,即为语法树。文法分为无二义文法和二义文法,判读的依据便在语法树上。语法树可以是使用最左推导推导出来的,也可以是使用最右推导推导出来的。如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。或者说。若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。需要注意的是,文法的二义与语言的二义是不相同的。

      在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序,分析算法又称为识别算法。分析算法可以分为自顶向下的和自底向上的。在分析算法中,短语、直接短语以及句柄是非常重要的知识点。简单来说,一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语。如果子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语。直接短语中的最左直接短语为该句型的句柄。

      总结:文法的产生式以及整哥推导过程都符合以及遵从某些规则来进行,因此,掌握好文法的各个关键点尤为重要。不仅需要知道文法的概念,还需要挖掘出文法包含了什么,代表着什么,里面产生式推导出来的结果具有怎样的意义。

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

    整数n

    标识符i

    表达式e

    条件语句

    赋值语句

    复合语句

    函数

    程序

    ...

       答:整数n :<n>::=<id>=<integer>

        标识符i:<i>::=var<id>{,<id>};

        表达式e:<e>::=[+ | -]<项>{<加减运算符><项>}

        条件语句:<条件>::=<表达式><关系运算符><表达式>|odd<表达式>

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

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

        函数:<函数>::=procedure<id>;

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

        …

    参考资料:https://www.cnblogs.com/yuxiuyan/p/7627371.html?utm_source=debugrun&utm_medium=referral

         https://blog.csdn.net/it_dream_er/article/details/53612006

  • 相关阅读:
    怎样用回显和无刷新实现模糊查询?
    2020软件工程作业02
    2020软件工程作业01
    2019春总结作业
    2019春第四次课程设计实验报告
    2019春第三次课程设计实验报告
    2019春第二次课程设计实验报告
    2019春第一次课程设计实验报告
    2019春第十二周作业
    2019春第十一周作业
  • 原文地址:https://www.cnblogs.com/xiaolan-Lin/p/11577011.html
Copyright © 2011-2022 走看看