当前位置:文档之家› 2013-2014编译原理考试

2013-2014编译原理考试

编译程序是对高级语言程序进行翻译在规范规约中,用句柄来刻画可规约串动态存储分配是指在运行阶段为源程序的数据对象分配存储空间词法分析的输出结果是单词的种别编码和自身值正规式等价是指所识别的语言集相等优化可生成运行时间短且占内存少的代码程序【一】文法和语言编译程序和翻译程序的区别编译程序是整体编译完了,生成目标代码,再一次性执行。

解释程序是一边解释,一边执行,并不形成目标程序。

文法文法是描述语言的语法结构的形式规则(即语法规则)。

文法G:定义为四元组(VN,VT,P,S)VN为非终结符号的集合,VT为终结符号的集合,P为产生式的集合,S为开始符号,是一个非终结符,至少要在一条规则中作为左部出现。

文法分类0型文法短语文法递归可枚举语言1型文法上下文有关文法上下文有关语言2型文法上下文无关文法上下文无关语言3型文法正规文法正规语言句型假定G是一个文法,S是它的开始符号。

如果S⇒*(表示从S出发,经0步或若干步可推出α),则称α是一个句型。

句子仅含终结符号的句型是一个句子。

语言由文法G生成的语言记为L(G),它是文法G的一切句子的集合推导直接推导规约直接规约直接推导:仅当A —>γ是一个产生式,有v =αAβ,w= αγβ,αAβ⇒αγβ,称v直接推导到w, 记作v ⇒ w,也称w直接归约到v。

最左推导又称为规范推导。

语法树语法树的根结由开始符号所标记。

随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结。

每个新结和其父亲结间都有一条连线。

在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。

二义文法如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。

也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。

文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导短语语法树中一棵子树的所有叶子从左向右排列起来形成一个相对于子树根的短语。

直接短语只有父子两代的短语为直接短语。

句柄一个句型的分析树中,最左边的只有父子两代的子树的叶子从左向右排列起来形成构成此句型的句柄。

已知一上下文无关文法,对给定的句型,画出语法树,并求其短语,直接短语以及句柄。

例:对于文法G[S]S→ ( L) | aS |a L→ L, S | S画出句型( S ,(a))的语法树,求某一句型的短语, 直接短语, 句柄.短语:( S ,(a));S ,(a); (a);a ;S 直接短语:S ;a 句柄: S画出语法树E →E+E|E*E|(E)|i, 关于(i*i+i)的语法树E(根)( E )E + EE * Ei i iE(根)( E )E * Ei E + Ei i1、语言和文法的相互转换1)已知文法写出该文法所生成的语言:①语言是有穷集:通过从开始符号的推导出所有的句子,所有句子的集合即为所求的语言②语言是无穷集:通过从开始符号的推导出几个的句子,总结句子的特点,将特点描述出来。

例如G: S→0S1, S→01S ⇒01 S⇒0S1 ⇒0011 S ⇒0S1 ⇒00S11=>000111语言为01个数相等,并且0在前,1在后L(G)={0n1n|n>=1}2) 已知语言写出描述该语言的文法一般所写的文法是上下文无关文法和正规文法,①用集合的形式表示语言若是这一类的题目先记住几个基本的情况,若是复杂的都可以分解成基本的情况。

一般给定集合是无限集,文法都应是递归文法,可以是直接递归也可以是间接递归。

基本的有:ⅰ{a n }若生成多个a,用递归文法表示则为:A->aA,递归有结束的时候,结束的写法看n的值:若n为0,即有0个a,即为ε,A->ε若n为1,即有1个a,即为a,A->a若n为2,即有2个a,即为aa,A->aaⅱ{a n b n}生成n个a,n个b且a在b之前,则每一次推导都要产生一个a和一个b,才能保证ab的个数相等,若用A作为非终结符,右部A不能在ab之前A->Aab,或在ab之后A->abA,这样生成的符号串就是abab…,所以只能在ab之间。

所以为:A->aAb,然后看n的值:若n 为0,即有0个ab,即为ε,A->ε若n为1,即有1个a,一个b,即为ab,A->abⅲ{rr t}若r是{a,b}*,r t是r的逆,第一位和最后一位相同,第二位和倒数第二位相同,……。

所以先生成第一个和最后一个,然后依次生成第二位和倒数第二位……。

因为第一位和最后一位相同,同为a或同为b,A->aAa|bAb,这样能保证从后部分是前部分的逆。

递归结束看r t和r之间的符号,在这里没有为ε,所以为A->ε;若改为{rar t},r t和r之间为a,即为A->a其余的情况可分解成以上三种情形。

例1:试构造生成语言L={a n b n c i|n≥1, i ≥0}的文法分析:a n b n c i可以进行分解让A生成a n b n,B生成c i符号串a n b n c i是AB连接后的结果。

n≥1所以A-〉aAb|ab ,i ≥0所以B->cB|ε也可写成B->Bc|ε。

解:S-〉AB A-〉aAb|ab B->cB|ε例2:已知语言L={a n bb n| n ≥1}, 写出产生L的文法。

分析:先生成a n b n,当n=1符号串为:abb解:S-〉aSb|abb例3:请给出描述语言={a2m+1 b m+1 | m>=0}∪{a2m b m+2| m>=0}的文法分析:a2m+1 b m+1可以看成aa2m b m b,而a2m b m可以用A->aaAb生成,a2m b m+2可以看成a2m b m bb,而a2m b m也可以用A->aaAb生成,若m=0,a2m b m为空串所以为A->ε,aa2m b m b 是aAb, a2m b m bb是Abb;解:s->aAb|AbbA->aaAb|ε例4:已知语言L={x | x∈{a,b,c}*,且x重复排列是对称的(aabcbaa,aabbaa,等)写出该语言的文法。

分析:若符号串的长度为偶数,则后半部分是前半部分的逆,所以为S->aSa|bSb|cSc|ε若符号串的长度为奇数,则除中间的外,中间字符的后半部分是中间字符前半部分的逆,而中间的字符可以为a,b,c所以文法为:S->aSa|bSb|cSc|a|b|c解: S->aSa|bSb|cSc|a|b|c|ε②用自然语言描述语言这种情况一般常根据经验来构造文法。

例:写一个文法,使其语言是奇数集,且每个奇数不以0开头。

N->A|MAM->B|MDA->1|3|5|7|9B->1|2|3|4|5|6|7|8|9D->0|B1.已知文法G[A]=({A},{a,b},{A—>bA|a},A)所生成的语言是什么?{b n a|n>=0}2.写一文法,使其语言是偶正整数的集合。

要求:(1) 允许0打头;(2)不允许0打头。

答:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|03.给出生成下述语言的上下文无关文法:(1){ a n b n a m b m| n,m>=0}(2) { 1n0m 1m0n| n,m>=0}(3) {a2n+1|n>=0}(4) {a2n+1b n c i|n>0,i>=0}答:(1)S→AAA→aAb|ε(2) S→1S0|AA→0A1|ε(3) S→aaS|a(4) S→aABA→aaAb|aabB→cB|ε4.已知语言L={x | x∈{a,b,c}*,且x重复排列是对称的(aabcbaa,aabbaa,等)写出该语言的文法。

S→aSa|bSb|cSc|a|b|c|ε1:证明下述文法G[E]是二义的。

E→a|(E)|EOEO→+|-|*|/答:可为句子a+a*a构造两个不同的最右推导:最右推导1 E EOE EOa E* a EOE* a EOa * a E+ a * a a + a * a最右推导2 E EOE EOEOE EOEO a EOE * a EOa * a E+ a * a a + a * a2:令文法G[E]为:E→T|E+T|E-TT→F|T*F|T/FF→(E)|i1:试构造生成语言L={a n b n c i|n≥1, i ≥0}的文法解:S-〉AB A-〉aAb|ab B->cB|ε2:已知语言L={a n bb n| n ≥1}, 写出产生L的文法。

解:S-〉aSb|abb3:已知文法G=({A,B,C},{a,b,c},A,P)其中产生式P由以下组成:A →abc A →aBbcBb→bB Bc →CbccbC →Cb aC →aaBaC →aa问:此文法表式的语言是什么?解:该题通过推导到的句子的特点进行总结,语言为:{a n b n c n|n>=1}4 请给出描述语言={a2m+1 b m+1 | m>=0}∪{a2m b m+2| m>=0}的文法解:s->aAb|AbbA->aaAb|ε5已知文法G[S]为:S→dABA→aA|aB→Bb |G[S]产生的语言是什么?G[S]能否改写为等价的正则文法?解:语言为:{da m b n|m>0,n>=0}可改写为正规文法:S->dA A->aB B->aB|bD|ε D->bD|ε6:试写一文法,使其描述的语言L(G) 是能被5整除的整数集合。

解:S->D|AD|ABDD->0|5A->1|2|3|4|5|6|7|8|9B->0|A|0B|AB7:已知语言L={x | x∈{a,b,c}*,且x重复排列是对称的(aabcbaa,aabbaa,等)写出该语言的文法。

解: S->aSa|bSb|cSc|a|b|c|ε2、已知一上下文无关文法,对给定的句型,画出语法树,并求其所有的短语,直接短语以及句柄。

1)已知一上下文无关文法,构造语法树语法树是对推导过程中的形象描述。

若用产生式:A->α推导,对应的树中,A是双亲结点,α中的符号是孩子结点。

一般根据推导过程可以画出语法树。

注意,推导过程有最左推导、最右推导和既不是最左也不是最右推导。

相关主题