编译原理第三版陈火旺第二章答案
3.何謂“標(biāo)識(shí)符”,何謂“名字”,兩者的區(qū)別是什么?
?
答:在程序設(shè)計(jì)語(yǔ)言中,標(biāo)識(shí)符是一個(gè)最基本的概念,其定義為:凡以字母開(kāi)頭的字母數(shù)字序列(有限個(gè)字符)都是標(biāo)識(shí)符。當(dāng)給予某標(biāo)識(shí)符以確切的含義時(shí),這個(gè)標(biāo)識(shí)符就叫做名字。程序語(yǔ)言中各種名字都是用標(biāo)識(shí)符表示的,只是標(biāo)識(shí)符是一個(gè)沒(méi)有意義的字符序列,而名字卻有著確切的意義和屬性(即類型和作用域)。如當(dāng)A、B1等作為標(biāo)識(shí)符時(shí)沒(méi)有什么含義,但當(dāng)其作為名字時(shí),卻可以代表變量名、數(shù)組名、函數(shù)名或過(guò)程名等。
6.令文法G6為
(1) G6 的語(yǔ)言 L(G6)是什么?
(2) 給出句子 0127、34 和 568 的最左推導(dǎo)和最右推導(dǎo)。
7.寫一個(gè)文法,使其語(yǔ)言是奇數(shù)集,且每個(gè)奇數(shù)不以0開(kāi)頭。?
答:首先分析題意,本題是希望構(gòu)造一個(gè)文法,由它產(chǎn)生的句子是奇數(shù),并且不以 0 開(kāi)頭,也就是說(shuō)它的每個(gè)句子都是以 1、3、5、7、9中的某個(gè)數(shù)結(jié)尾。如果數(shù)字只有一位,則滿足要求, 如果有多位,則要求第 1 位不能是0,而中間有多少位,每位是什么數(shù)字(必須是數(shù)字)則沒(méi)什么要求,因此,我們可以把這個(gè)文法分 3 部分來(lái)完成。分別用3個(gè)非終結(jié)符來(lái)產(chǎn)生句子的第 1 位、中間部分和最后 1 位。引入幾個(gè)非終結(jié)符,其中,一個(gè)用作產(chǎn)生句子的開(kāi)頭,可以是 1 ~ 9之間的數(shù),不包括 0,一個(gè)用來(lái)產(chǎn)生句子的結(jié)尾,為奇數(shù),另一個(gè)則用來(lái)產(chǎn)生以非 0整數(shù)開(kāi)頭后面跟任意多個(gè)數(shù)字的數(shù)字串,進(jìn)行分解之后,這個(gè)文法就很好寫了。
G(S):A -> 2I 4I 6 I 8I D
B->A I 0
C->CB I A
D->1 I 3 I 5 I 7 I 9
S->CD I D
8.令文法為
(1)給出 i*(i+ i)的最左推導(dǎo)和最右推導(dǎo)
?(2) 給出 i+ i+i 以 i+i *i 和 i-i-i 的語(yǔ)法樹(shù)。
9.證明下面的文法是二義的:
S—iSeS| iS | i
答:根據(jù)文法的二義性的定義,如果要證明該文法是二義的,必須找到一個(gè)句子,使得該句子具有兩個(gè)不同的最右推導(dǎo)或兩個(gè)不同的語(yǔ)法樹(shù)。我們首先分析這個(gè)文法,根據(jù)我們對(duì)程序語(yǔ)言的了解,不難發(fā)現(xiàn),這個(gè)文法應(yīng)該是用來(lái)表示 if...else…結(jié)構(gòu)的(用“i”代表“if” 或語(yǔ)句集,“e”代表“else”)。因此我們就要到if...else…結(jié)構(gòu)中去找二義性。我們知道,程序語(yǔ)言一般都規(guī)定else部分是和它前面離它最近的沒(méi)有被匹配的if語(yǔ)句進(jìn)行匹配。而上 面的這個(gè)文法體現(xiàn)不出這種限制,因此我們可以找這樣一個(gè)句子,在else 前面有兩個(gè) if (如句子 iiiei), else 和不同的 if 進(jìn)行匹配時(shí)就會(huì)產(chǎn)生不同的語(yǔ)義。
考慮句子 iiiei,存在如下兩個(gè)最右推導(dǎo):
由此該文法是二義的。
10.把下面文法改寫為無(wú)二義的:
S -> SSI(S)I( )
答:本題給出的文法是二義的,關(guān)鍵在于 S ->?SS 是產(chǎn)生二義的根源,我們將該產(chǎn)生式改造成等價(jià)的遞歸結(jié)構(gòu),消除二義性。
將文法改造成 G(S):
S-> TS I T
T-> (S)?I ( )
11 . 給出下面語(yǔ)言的相應(yīng)文法
答:分析 L1,要求 a 和 b 的個(gè)數(shù)一樣多,并至少為 1 個(gè),而 c 的個(gè)數(shù)為 0 個(gè)以上即可,因此,我們可以使用一個(gè)非終結(jié)符去生成串,而用另外一個(gè)非終結(jié)符去生成。
分析L2,要求b和c的個(gè)數(shù)一樣多,因此可是使用一個(gè)非終結(jié)符去生成,而使用另外一個(gè)非終結(jié)符去生成,可以模仿使用一個(gè)非終結(jié)符去生成串,而用另 外一個(gè)非終結(jié)符去生成。
對(duì)于L3,可以將 分成兩段考慮,即 和,然后使用兩個(gè)非終結(jié)符分別去產(chǎn)生它們。
L4不能采用分段處理的方式,它要求中間的0和1 的個(gè)數(shù)相同,而且一前一后的 0 和 1 的個(gè)數(shù)相同,對(duì)于這種題型我們可以采用從里向外擴(kuò)展的方式進(jìn)行,即先用一個(gè)非終結(jié)符生成處于中間的m 個(gè) 0 和 m個(gè)1,然后,使用另外一個(gè)非終結(jié)符在該串的基礎(chǔ)上擴(kuò)充前后的n個(gè)0 和 n 個(gè)1。
文法如下:
?
總結(jié)
以上是生活随笔為你收集整理的编译原理第三版陈火旺第二章答案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: UX、UI、 IA和IxD
- 下一篇: 因子图优化原理(iSAM、iSAM2论文