第四课 第二章总结
一、 梳理第二章的内容,写一篇理解与总结。
1.文法的直观概念
以自然语言为例,人们无法列出全部句子,但人们可给出一些规则来组成句子结构。汉语句子可以由主语后随谓语而成,构成谓语的是动词和直接宾语,采用第一章的EBNF来表示这种构成规则。例句如下:
<句子>=><主语><谓语>
=><代词><谓语>
=>我<谓语>
=>我<动词><直接宾语>
=>我是<直接宾语>
=>我是大学生
其中=>的含义是使用一条规则,代表其左端的某个符号,产生其右端的符号串.
2.符号和符号串
(1)字母表
字母表是元素的非空有穷集合,字母表的元素称为符号,因此字母表也称为符号集,不同的语言有不同的字母表,例如汉字、数字等
(2)符号串
由字母表中的符号组成的任何有穷序列称为符号串.,允许有空符号串,用E表示,其长度为0,即|E|=0.
3.文法和语言的形式定义
规则也叫重写规则、产生式或生成式,形如a->B或a::=B(a,B)有序对,其中a被称为左部,B被称为右部
文法G定义为四元组(Vn,VT,P,S),其中Vn为非终结符,;VT为终结符;P为规则(a->B)的集合,a∈(Vn U VT)*且至少包含一个非终结符,
B∈(Vn U VT)*; Vn,VT和P是非空有穷集,S被称为识别符或开始符,是一个非终结符。
4.文法的类型
文法分成4种类型,即0型或、1型文法或称上下文有关的、2型文法或称上下文无关的和3型文法或称正规文法。这几类文法的差别在于对产生式施加不同的限制。
令G是一个文法,S是文法的开始符号,abo的是文法G的一个句型。如果有S-*→aAo且(A-+→b测标b是句型abo相对于非终结符A的短语。特别地,如果有(A→β是句型abo相对于规则A→b的直接短语(也称简单短语)。一个右句型的直接短语称为该句型的句柄。句柄的概念只适合于右句型
5.上下文无关文法及其语法树
描述一种简单赋值语句的产生式为
<赋值语句>->i:=E
描述条件语句的文法片段为
<条件语句>->if<条件>then<语句>|if<条件>then<语句>else<语句>。
在推导的任何一步α=>β,其中α,β是句型,对α中的最左(最右)非终结符进行替换,这种推导称为最左(最右)推导,其中最右推导又被称为规范推导。
对于存在某个句子对应两课不同的语法树,则说明这个文法是二义的,换句话说:一个文法存在某个句子,他有两个不同的最左(最右)推导,则这个文法是二乙义的。
6.句型的分析
如果有A=>β,则称β是句型αβγ相对于规则A->β的直接短语(也称简单短语)。一个右句型的直接短语称为该句型的句柄,句柄的概念只适合于右句型。对于无二义文法,一个右句型的唯一句柄是其所有直接短语中最左边那个,该句型最左直接短语既是他的句柄。
二、尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)〈程序〉→〈分程序〉.
〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉
<常量说明部分> → CONST<常量定义>{ ,<常量定义>};
<常量定义> → <标识符>=<无符号整数>
<变量说明部分> → VAR<标识符>{ ,<标识符>};
<过程说明部分> → <过程首部><分程序>;{<过程说明部分>}
<过程首部> → procedure<标识符>;
<语句> → <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>| <写语句>|<复合语句>|<空>
<赋值语句> → <标识符>:=<表达式>
<条件语句> → if<条件>then<语句>
<加减运符> → +|-
<乘除运算符> → *|/
<关系运算符> → =|#|<|<=|>|>=
<项> → <因子>{<乘除运算符><因子>}
<因子> → <标识符>|<无符号整数>|(<表达式>)
<过程调用语句> → call<标识符>
<当型循环语句> → while<条件>do<语句>