1. 梳理第二章的内容,写一篇理解与总结。
在第二章我们学习了符号串、句子、语法树、文法、二义性等知识内容。
符号串
(1)字母表. 符号的非空有限集合。典型的符号是字母、数字、各种标点和运算符等。
(2)符号串.定义在某一字母表上,由该字母表中的符号组成的有限符号序列。
符号串集合幂运算: A0=εA0=ε, A1=AA1=A, A2=AAA2=AA, ...
符号串集合闭包运算。正闭包: A+=A1∪A2∪A3∪...A+=A1∪A2∪A3∪...。闭包: A∗=A0∪A+A∗=A0∪A+。
句子
仅含有终结符号的句型是文法的一个句子。语法树从左至右终结符序列,是句型的一个特例。Z =+> x。对于文法G=(VT,VN,S,φ),如果,则称α是当前文法的一个句型。
语法树
语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次。简单说,语法树就是按照某一规则进行推导时所形成的树。分析树的特点:每一个结点都有标记。根结点由文法的开始符号标记; 每个内部结点由非终结符号标记,它的子结点由这个非终结符号的这次推导所用产生式的右部各符号从左到右依次标记;叶结点由非终结符号或终结符号标记,它们从左到右排列起来,构成句型。
文法
文法是对语言结构的定义与描述。即从形式上用于描述和规定语言结构的称为"文法"(或称为"语法")。
文法定义四元组:G=(Vn,Vt,P,Z)G=(Vn,Vt,P,Z)。VnVn为非终结符号集,VtVt为终结符号集,二者统称字汇表(V);P为产生式(规则)集合;Z为开始符号(识别符号)。
最左推导:如果 a=>b,并且在每“一步推导”中,都替换a中最左边的非终结符号,则称这样的推导为最左推导。
最右推导:也称规范推导,如果 a=>b,并且在每“一步推导”中,都替换a中最右边的非终结符号,则称这样的推导为最右推导。
文法的二义性:
一个句型可能对应多个语法树,一个句型可能对应多个最左/最右推导。
如果一个文法中的某个句子可以对应两个不同的语法树,则称这个文法是二义的。
两个不同的文法可能是一样的语言。
如果一种语言的所有文法都是二义的,则称此语言先天二义。
判定一个文法是否是二义的是递归不可解的。
消除二义性
最近最后匹配原则
2. 尝试写出PL/0 语言的文法。
整数n n :: = 1 | 2 | ..... | 9 | 0
标识符i i :: = <字母> | {<字母> | <数字 >}
表达式e ::=[+|-]<项>{<加减运算符><项>}
条件语句 ::=if<条件>then<语句>
赋值语句 ::=<id>:=<表达式>
复合语句 ::=begin<语句>{;<语句>}end
函数 ::= <类型说明><函数名><复合语句>
程序 ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>