作业四 文法和语言总结与梳理
1. 梳理第二章的内容,写一篇理解与总结。
通过老师上课的讲解以及课后的作业练习,我对第二章的内容也学习的比较透彻了。第二章主要学习了文法和语言,其中有文法的概念、类型、定义,符号和符号串的概念用法、语法树、上下无关文法、最左最右推导、以及文法语言的二义性等。
语言是一个记号系统,完整的定义包括语法和语义两方面。语法是一组说明语言的规则,文法是用来阐明这些语法规则的一个重要形式工具。语义包括静态语义和动态语义,阐明语义要比语法困难的多。
符号和符号串:
正如我们学习的 English 是由单词和标点符号构成的,单词又是有字母构成的,计算机语言也是如此,也是由字母和数字等一些基本符号构成的,一个源程序就是一个 “基本符号串”,所以我们开始了解符号和符号串相关的定义。
字母表:
元素的非空有穷集合。不同的语言有他自己不同的字母表,我们的计算机语言字母表就是数字,字母,标点等若干符号了。中文的字母表就是汉字了。
符号串:
字母表的符号组成任何又穷序列的符号串。例如字母表 A={a,b,c} 则由这个字母表组成的符号串包括: {ab,ac,bc,abc,a,b,c}。有了这些就相当于有了 123456,接下来就是一些运算了,符号串的一些运算了。
最左(最右)推导:如果在推导的任何一步α→β,其中α、β是句型,都是对α中的最左(右)非终结符进行替换。
短语:找出每个子树末端节点形成的字符串,便可以得到所以的短语
直接短语:先找出没有包含其他更小子树的子树,它的叶结点就是直接短语
句柄:最左边的直接短语就是句柄
文法的二义性和语言的二义性:
若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的或者,若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的判定任给的一个上下文无关文法是否二义,或它是否产生一个先天二义的上下文无关语言,这两个问题是递归不可解的,但可以为无二义性寻找一组充分条件文法的二义性和语言的二义性是不同的概念。因为可能有两个不同的文法G和G’满足L(G)=L(G’),其中G是二义的,G’是无二义的。如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n:n :: = 1 | 2 | ..... | 9 | 0
标识符i: i :: = <字母> | {<字母> | <数字 >}
表达式e :e ::= [+|-]<项>{<加减运算符><项>}
条件语句:<条件语句> ::= if<条件>then<语句>
赋值语句:<赋值语句> ::= <标识符>:=<表达式>
复合语句:<复合语句> ::= begin<语句>{;<语句>}end
函数:<函数> ::= <类型说明><函数名><复合语句>
程序:<程序> ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>