作业四:文法和语言总结与梳理
1. 梳理第二章的内容,写一篇理解与总结。
答:重温一下第二章学习过的知识点,在第二章中我们学习了符号、符号串、规则(也叫重写规则、产生式或生成式)、
句型、句子、语言、0型文法、上下文有关文法、上下文无关文法、正规文法、语法、语法树、最左推导、最右推导、二义性、短语、直接短语、句柄等!
字母表:字母表元素的非空有限集合,字母表中的元素称为符号,因此字母表也称为符号集,典型的符号是字母、数字、各种标点和运算符等等。
符号串:由字母表中的符号组成的任何有穷序列称为符号串。
长度:符号串a的长度是指a中出现的符号的个数,记作|a|。
空串:长度为0的符号串,常用e表示。| E|=0
前缀(头):符号串a的前缀是指从符号串a的末尾删除0个或多个符号后得到的符号串。如:univ 是 university 的前缀。
后缀(尾):符号串a的后缀是指从符号串a的开头删除0个或多个符号后得到的符号串。如:sity 是 university 的后缀。
字串:符号串a的子串是指删除了a的前缀和/或后缀后得到的符号串。如:ver 是 university 的子串。
真前缀、真后缀、真子串:如果非空符号串b是a的前缀、后缀或子串,并且b¹a,则称b是a的真前缀、真后缀、或真子串。
子序列:符号串a的子序列是指从a中删除0个或多个符号(这些符号可以是不连续的)后得到的符号串。如:nvst。
符号串有以下运算:
(1)符号串的头尾,固有头和固有尾
(2)符号串的连接
(3)符号串的方幂
(4)符号串集合
规则:形如α→β或α::=β的(α,β)有序对,其中α称为规则的左部,β称作规则的右部。这里使用的符号→(::=)读作“定义为”。例如A→a读作“A定义为a”。也把它说成是一条关于A的规则(产生式)。
句型:对于文法G=(VT,VN,S,φ),如果S=>@,则称@是当前文法的一个句型。
句子:仅含有终结符号的句型是文法的一个句子。
语言:文法G产生的所有句子组成的集合是文法G所定义的语言。
0型文法:0型文法(PSG): α∈(VN∪VT)* ,且至少含一个VN,β∈(VN∪VT)*
0型文法也称为短语文法。一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。
上下文有关文法: 对任一产生式α→β,都有|β|>=|α|, 仅仅 S→ε除外,产生式的形式描述:α1Aα2→α1βα2
(其中,α1、α2、β∈(VN∪VT)*,β≠ε,A∈VN),即:A只有出现在α1α2的上下文中,才允许用β替换。产生的语言称“上下文有关语言”。
上下文无关文法:对任一产生式α→β,都有α∈VN,β∈(VN∪VT)*
产生式的形式描述:A→β(A∈VN),即β取代A时,与A所处的上下文无关。产生的语言称“上下文无关语言”。
正规文法:每个产生式均为 “A→aB”或“A→a” —— 右线性
“A→Ba”或“A→a” —— 左线性,其中,A、B∈VN,a∈VT*,产生的语言称“正规语言”。
语法树:推导的图形表示,又称推导树。
最左推导:如果在推导的任何一步@=>B,其中@、B是句型,都是对@中的最左非终结符进行替换,则称这种推导为最左推导。
最右推导:与最左推导相反。
二义性:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义。含有二义性句子的文法是二义性的文法。有些语言,根本就不存在无二义性的文法,这样的语言称为二义性的语言。
短语:一棵子树的所有叶结点自左至右排列起来,形成此句型相对于该子树根的短语。
直接短语:分析树中只有父子两代的子树的所有叶结点自左至右排列起来,形成此句型相对于该子树根的直接短语。
句柄:分析树中最左边的那棵只有父子两代的子树的所有叶结点自左至右排列起来,就是该句型的句柄。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n
标识符i
表达式e
条件语句
赋值语句
复合语句
函数
程序
...
答:
整数n:<数字> ::= 0 | 1 | 2 | … | 8 | 9
标识符i: i :: = <字母> | {<字母> | <数字 >}
表达式e:::= [+ | -] <项> { <加法运算符><项>}
条件语句:::= <表达式> <关系运算符> <表达式> | ODD <表达式>
赋值语句: -> <标识符> := <表达式>
复合语句:::= BEGIN <语句> {;<语句>} END
函数:
程序:
...