1.梳理第二章的内容,写一篇理解与总结。
答:在第二章文法和语言的学习中,首先了解了文法和语言的概念,当我们要表述一种语言时,我们无法列出语言包含的全部句子,这时候就需要用一些规则来说明或是定义句子的组成结构,而这种组成结构就是文法。我们可以用适当条数的文法规则把语言的全部句子描述出来,文法是以有穷的集合刻画无穷的集合的一个工具。
接着学习了何为符号,何为符号串以及符号串的一些简单运算,例如:符号串的头尾,固有头和固有尾;符号串的连接;符号串的方幂;符号串集合,闭包等。
文法和语言的形式定义,将文法G定义为四元组(Vn,Vt,P,S),Vn为非终结符(或语法实体,或变量)集,Vt为终结符集,P为规则的集合,且至少包含一个非终结符,Vn,Vt,P是非空有穷集,S是识别符或开始符,它是一个非终结符。Vn和Vt不包含公共的元素。
文法的类型分为四种:即0型、1型、2型和3型。0型文法为短语文法,即所有产生式都是α→β这种结构,α∈(Vn∪Vt)*且至少含有一个非终结符。1型文法也称为上下文有关文法即每个产生式α→β均满足|β|≥|α|,仅S→ε除外。2型文法也称为上下文无关的,即P中的每一个产生式α→β满足:α是一个非终结符,β∈(Vn∪Vt)*。3型文法也称为正规文法,即P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈Vt*。
语法树是一种描述上下文无关文法的句型推导的直观工具,也称为推导树或分析树。假设G为文法,S是文法的开始符号,αβδ是文法G的一个句型。短语:S*=>αAδ,且A+=>β,则β是句型αβδ相对于非终结符A的短语。直接短语:若有A=>β,则β是句型αβδ的直接短语。句柄:一个右句型的直接短语称为该句型放入句柄。
文法的二义性:如果一个文法存在某个句子对应两棵不同的语法树,包含两个或两个以上的最右(最左)推导,则该文法是二义性。
语言的二义性:若某种语言根本不存在无二义性的文法,则成为二义性的语言。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n
<数字>->0|1|2...|8|9
标识符i
<标识符i>-><字母><数字>
表达式
<表达式>-> [+|-]<项>{<加减运算符><项>}
条件语句
<条件语句>-> if<条件>then<语句>
赋值语句
<赋值语句>-><标识符>-><表达式>
复合语句
<复合语句>-> begin<语句>{;<语句>} end
函数
程序
<程序>-><分程序>.
<分程序>->[<常量说明部分>] [<变量说明部分>][<过程说明部分>]<语句>