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中最右边的非终结符号,则称这样的推导为最右推导。
二义性文法
文法所定义的某个句子存在两棵不同的语法树。
二义性问题是不可判定的。
文法中存在某个句子,它有两个不同的规范(最右)推导。
文法中存在某个句子,它有两个不同的规范(最左)规约,即在规约中某些规范句型的句柄不唯一。
如:L(G)=L(G') 表示文法是等价的,但是并不表示语言等价;一个语言不止一种语言。 L表示语言,G表示文法
消除二义性
最近最后匹配原则
2. 尝试写出PL/0 语言的文法。
整数n
n ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
标识符i
i ::= <字母> | i <字母> | i <数字>
<字母> ::= a | b | c | d | e | ... | w | x | y | z
<数字> ::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
表达式e
e ::=[+ | -] <项> { <+><项>}
e ::=[+ | -] x { + x }
<项> ::= <因子> {< * ><因子>}
<项> x ::= y { * y}
<因子> ::= <标识符> | <无符号整数> | ‘(’ <表达式> ‘)’
<因子> y ::= i | n | ( e )
条件语句
<条件语句> ::= IF <条件> THEN <语句>
<条件语句>::= if A then B
赋值语句
<赋值语句> ::= <标识符> := <表达式>
复合语句
<复合语句> ::= BEGIN <语句> {;<语句>} END
<语句> ::= <赋值语句> | <条件语句> | <当型循环语句> | <过程调用语句> | <读语句> | <写语句> | <复合语句> | <空>
函数
程序
<程序> ::= <分程序>.
<分程序> ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>
<常量说明部分> ::= CONST <常量定义> { ,<常量定义> } ;
<常量定义> ::= i = n
<变量说明部分> ::= VAR i { , i } ;
<过程说明部分> ::= <过程首部><分程序>{; <过程说明部分> };
<过程首部> ::= PROCEDURE i ;