1. 梳理第二章的内容,写一篇理解与总结。
通过这些天对第二章内容的学习,我理解了很多也学到了很多的知识,下面我将对我所学到的第二章的全部知识进行梳理和总结,其中包括文法是什么、字母表的定义、符号串的定义及运算、文法及其类型、语法数内容、句型的推导、文法二义性、句型分析及相关,这几大部分。希望可以为我今后的学习之路夯实基础。
第二章——文法和语言
(1)文法是什么:
文法的定义:文法是对语言结构的定义与描述,即从形式上描述和规定语言结构,也称为语法。可以说文法是有穷集合刻画无穷集合的一个工具。
(2)字母表的定义:
字母表的定义:是元素的非空有穷集合。其中的元素称为符号,因此字母表也称为符号集。
值得一提的是,c语言的字母表是由字母、数字、若干专用符号以及char、struct、if、do等等的保留字组成的。
(2)符号串的定义及运算:
符号串的定义:由该字母表中的符号组成的有限符号序列。
字符串的连接:εx=xε=x
符号串的方幂:x1=ab,x2=abab,x3=ababab
A4:意为由集合A里四个字符串组成的所有符号串的集合。
A+:意为由集合A里一个或多个元素组成的所有符号串的集合。
(3)文法及其类型:
文法定义四元组:G=(VN,VT,P,Z)。VN为非终结符号集,VT为终结符号集,二者统称字汇表(V);P为产生式(规则)集合;Z为开始符号。
文法的类型:(如下图)
(4)语法树内容:
语法树的定义是一种描述上下文无关文法的举行推到的直观工具也称推导树。
他的叶节点由非终结符号或终结符号标记组成,将其从左到右排列起来之后即可构成句型。
(5)句型的推导:
句型:对于G=(VN,VT,P,Z)如果S=*=α,则α是当前文法的一个句型。
最左推导:每个推导过程都是从最左边的非终结符号的替换开始
最右推导:每个推导过程都是从最右边的非终结符号的替换开始,并且最右推到常被称为规范推导。
(6)文法二义性:
文法二义性:如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。
值得注意的是,文法的二义性和语言的二义性是两个不同的概念。
(7)句型分析及相关:
如下图:
短语:一颗子树所有叶节点从左至右排列起来形成此语句对于该树的根的短语。
短语中最左直接短语教句柄。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n :
<整数>::=| 0|1|2|3|4......
标识符i :
<标识符>::=<字母>{<字母>|<数字>}
表达式e :
<表达式>::=[+|-]<项>{<加减运算符><项>}
条件语句 :
<条件语句>::=if<条件>then<语句>
赋值语句 :
<赋值语句>::=<标识符>:=<表达式>
复合语句 :
<复合语句>::=<标识符>:=<表达式>
函数 :
::=
程序 :
<程序>::=<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句>
<常量说明部分>::=CONST<常量定义>{,<常量定义>}; <常量定义>::=<标识符>=<无符号整数> <无符号整数>::=<数字>{<数字>} <变量说明部分>::=VAR<标识符>{,<标识符>}; <标识符>::=<字母>{<字母>|<数字>} <过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}; <过程首部>::=PROCEDURE<标识符>;