簡(jiǎn)介:第二章高級(jí)語言及其語法描述,第二章高級(jí)語言及其語法描述,本章概述高級(jí)語言的結(jié)構(gòu)和主要的共同特征,并介紹程序語言的語法描述方法。要學(xué)習(xí)和構(gòu)造編譯程序,理解和定義高級(jí)語言是必不可少的。21程序語言的定義任何語言實(shí)現(xiàn)的基礎(chǔ)是語言的定義。在定義方面,編譯程序研制者與一般用戶有所不同,他們對(duì)那些構(gòu)造允許出現(xiàn)更感興趣。即使一時(shí)不能看出某種構(gòu)造的實(shí)際應(yīng)用,或者判斷實(shí)現(xiàn)該結(jié)構(gòu)會(huì)導(dǎo)致嚴(yán)重的困難,但仍必須嚴(yán)格根據(jù)語言的定義實(shí)現(xiàn)它。程序語言主要由語法和語義兩方面定義。,第二章高級(jí)語言及其語法描述,,211語法任何語言程序都可以看成是一定字符集(稱為字母表)上的字符串(有限序列)。但是什么樣的字符串才算是一個(gè)合適的程序呢所謂一個(gè)語言的語法是指這樣的一組規(guī)則,用它可以形成和產(chǎn)生一個(gè)合適的程序。這些規(guī)則一部分稱為詞法規(guī)則,另一部分能稱為語法規(guī)則(或產(chǎn)生規(guī)則)。,第二章高級(jí)語言及其語法描述,,注意這里提到三個(gè)概念A(yù)一個(gè)程序只是用一個(gè)有限字符集作為字母表;B詞法規(guī)則是指單詞符號(hào)的形成規(guī)則。單詞符號(hào)一般包括各類型的常數(shù)、標(biāo)識(shí)符、基本字、算符和界符等。C語言的語法規(guī)則規(guī)定了如何從單詞符號(hào)形成更大的結(jié)構(gòu)(即語法單位),換言之,語法規(guī)則是語法單位的形成規(guī)則。一般程序語言的語法單位有表達(dá)式、語句、分程序、函數(shù)、過程和程序等。,第二章高級(jí)語言及其語法描述,,212語義對(duì)于一個(gè)語言來說,不僅要給出它的詞法、語法規(guī)則,而且要定義它的單詞符號(hào)和語法單位的意義。這就是語義問題。語義是指這樣的一組規(guī)則,使用它可以定義一個(gè)程序的意義。我們采用的方法為基于屬性文法的語法制導(dǎo)翻譯方法。,第二章高級(jí)語言及其語法描述,,一個(gè)程序語言的基本功能是描述數(shù)據(jù)和對(duì)數(shù)據(jù)的運(yùn)算。所謂程序,從本質(zhì)上來說是描述一定數(shù)據(jù)的處理過程。在現(xiàn)今的程序語言中,一個(gè)程序大體可以視為下面所示的層次結(jié)構(gòu),,,,,程序,,子程序,或,分程序,,語句,,表達(dá)式,,數(shù)據(jù)引用,算符,函數(shù)調(diào)用,,,,,第二章高級(jí)語言及其語法描述,,自上而下看上述層次結(jié)構(gòu)頂端是程序本身,他是一個(gè)完整的執(zhí)行單位。一個(gè)程序通常是由若干個(gè)子程序或分程序組成的,他們常常含有自己的數(shù)據(jù)(局部名)。子程序或分程序是由于語句組成的。而組成語句的成分是個(gè)種類型的表達(dá)式。表達(dá)式是描述數(shù)據(jù)運(yùn)算的基本結(jié)構(gòu),它通常含有數(shù)據(jù)引用、算符和函數(shù)調(diào)用。,第二章高級(jí)語言及其語法描述,,自下而上看上述層次結(jié)構(gòu)我們希望通過對(duì)下層成分的了解掌握上層成分,從而掌握整個(gè)程序。在學(xué)習(xí)編譯原理的過程中特別注意程序語言的每個(gè)組成成分都有(抽象的)邏輯和計(jì)算機(jī)實(shí)現(xiàn)兩方面的意義。當(dāng)從數(shù)學(xué)上考慮每一個(gè)組成成分時(shí),我們注重它的邏輯意義,當(dāng)從計(jì)算機(jī)這個(gè)角度來看時(shí),我們注重他在機(jī)內(nèi)的表示和實(shí)現(xiàn)的可能性與效率。,第二章高級(jí)語言及其語法描述,,22高級(jí)語言的一般特性221高級(jí)語言的分類;A強(qiáng)制式語言過程式語言(命令驅(qū)動(dòng)、面向語句,如PASCALC等)B應(yīng)用式語言函數(shù)式語言(如LISP)C基于規(guī)則的語言邏輯型設(shè)計(jì)語言(如PROLOG)D面向?qū)ο笳Z言支持封裝、多態(tài)、繼承222幾種程序的典型結(jié)構(gòu);,第二章高級(jí)語言及其語法描述,,FORTRANMAINENDSUBROUTINESUB1ENDSUBROUTINESUBNEND,一FORTRAN一個(gè)FORTRAN程序有一個(gè)主程序段和若干個(gè)(可以是0個(gè))輔助程序段組成。如右側(cè)),第二章高級(jí)語言及其語法描述,,輔助程序段可以是子程序、函數(shù)段或數(shù)據(jù)。每程序段由一系列說明語句和執(zhí)行語句組成。各程序段可以獨(dú)立編輯。這對(duì)模塊設(shè)計(jì)甚為方便。一個(gè)FORTRAN程序個(gè)程序段所定義的各種名字通常是彼此獨(dú)立的。同一個(gè)標(biāo)識(shí)符在不同的程序段中一般都可以代表不同的名字,即代表不同的存儲(chǔ)單元,個(gè)程序段對(duì)它們的引用或賦值是彼此無關(guān)的。但是,不同程序段里的同名公用塊(COMMONBLOCK卻代表同一個(gè)存儲(chǔ)區(qū)域。因此,出現(xiàn)在COMMON語句中的名字所代表的單元在其他程序塊中也可以引用。所以說,公用區(qū)具有全局性。不出現(xiàn)在COMMON中的名字所代表的單元具有局部性。,第二章高級(jí)語言及其語法描述,,二PASCALPASCAL是一個(gè)允許子程序嵌套定義的語言。一個(gè)PASCAL程序可以看作是操作系統(tǒng)調(diào)用的一個(gè)子程序,而子程序中又可以定義別的子程序。,PROGRAMMAINPROCEDUREP1PROCEDUREP11BEGINENDBEGINENDPROCEDUREP2BEGINENDBEGINEND,第二章高級(jí)語言及其語法描述,,PASCAL這種嵌套結(jié)構(gòu)中允許同一標(biāo)識(shí)符在不同的子程序段中表示不同的名字。關(guān)于名字的作用域的規(guī)定是A一個(gè)在子程序B1中說明的名字X只在B1中有效(局部于B1)。B如果B2是B1的一個(gè)內(nèi)層子程序,且B2中對(duì)標(biāo)識(shí)符X沒有新的說明,則原來的名字X在B2中仍然有效。如果B2對(duì)X重新作了說明,那么,B2中對(duì)X的任何引用都是指重新說明過的這個(gè)X。,第二章高級(jí)語言及其語法描述,,223數(shù)據(jù)類型與操作;一個(gè)數(shù)據(jù)類型通常包括以下三種要素A用于區(qū)別這種類型的數(shù)據(jù)對(duì)象的屬性B這種類型的數(shù)據(jù)對(duì)象可以具有的值C可以作用于這種類型數(shù)據(jù)對(duì)象的操作一、初等數(shù)據(jù)類型常見的初等數(shù)據(jù)類型有A數(shù)值數(shù)據(jù)B邏輯數(shù)據(jù)C字符數(shù)據(jù)D指針類型,第二章高級(jí)語言及其語法描述,,指針是指這樣一種類型的數(shù)據(jù),他們的值指向另一些數(shù)據(jù)。一般意義是,假定P是一個(gè)指針,PADDRX意味著P將指向X,或說P的值將是變量X的地址。有些語言用P↑表示指針P的內(nèi)容。在PADDRX的情況下,如令P↑03,則意味著X的值是03,第二章高級(jí)語言及其語法描述,,用計(jì)算機(jī)術(shù)語來說,名字可以看成是代表一個(gè)抽象的存儲(chǔ)單元,這個(gè)單元可包含一位、一字節(jié)、一字或相繼的許多個(gè)字。而這個(gè)單元的內(nèi)容則認(rèn)為是此名字的值。名字的值就是它所表示的對(duì)象。此外,我們還必須指出名字的屬性。一個(gè)名字的屬性包括類型和作用域。名字的類型決定了它能具有什么樣的值,值在計(jì)算機(jī)內(nèi)的表示方式,以及對(duì)他能施加什么運(yùn)算。名字的作用域規(guī)定了他的值存在范圍。,第二章高級(jí)語言及其語法描述,,二、數(shù)據(jù)結(jié)構(gòu)許多程序語言提供了一種由初級(jí)數(shù)據(jù)定義復(fù)雜數(shù)據(jù)的手段。下面我們將概述其中常見的定義方式A數(shù)組從邏輯上說,一個(gè)數(shù)組是由同一類型數(shù)據(jù)所組成的某種N維矩形結(jié)構(gòu)。沿著每一維的距離稱為一個(gè)下標(biāo)。數(shù)組的每個(gè)元素是矩形結(jié)構(gòu)中的一個(gè)點(diǎn),它的位置可通過給出每維的下標(biāo)來確定。,第二章高級(jí)語言及其語法描述,,數(shù)組的每個(gè)元素(也稱為下標(biāo)變量)是由數(shù)組名連同各維的下標(biāo)值命名的。如A(I1,I2,IN)。根據(jù)數(shù)組的類型,每個(gè)數(shù)組元素在計(jì)算機(jī)中占有同樣大小的存儲(chǔ)空間。如果一個(gè)數(shù)組所需的存儲(chǔ)空間大小在編譯時(shí)就已知道則稱此數(shù)組是一個(gè)確定數(shù)組;否則稱為可變數(shù)組。,第二章高級(jí)語言及其語法描述,,數(shù)組的存儲(chǔ)表示有多種形式,最簡(jiǎn)單的一種是把整個(gè)數(shù)組按行(或按列)存放在一片連續(xù)存儲(chǔ)區(qū)中。數(shù)組元素的地址計(jì)算和數(shù)組的存儲(chǔ)方式密切相關(guān)。關(guān)于數(shù)組元素的地址計(jì)算公式,數(shù)據(jù)結(jié)構(gòu)教材中有詳細(xì)的介紹。編譯程序要做的就是實(shí)現(xiàn)地址計(jì)算公式,使數(shù)組元素得到正確的引用。在編譯過程中,當(dāng)碰到數(shù)組說明時(shí),必須把數(shù)組的有關(guān)的信息記錄在一個(gè)“內(nèi)情向量”之中,以便以后計(jì)算數(shù)組元素的地址時(shí)引用這些信息。每個(gè)數(shù)組的內(nèi)情向量必須包括維數(shù),各維的上下限,首地址,以及數(shù)組元素的類型等。,第二章高級(jí)語言及其語法描述,,B記錄從邏輯上說,記錄結(jié)構(gòu)是由已知類型的數(shù)據(jù)組合起來的一種結(jié)構(gòu)。記錄結(jié)構(gòu)是許多程序語言的一類重要的數(shù)據(jù)結(jié)構(gòu)。不同語言定義記錄結(jié)構(gòu)的方式也不同。如PASCAL語言采用下面形式定義記錄CARDRECORDNAMEARRAY120OFCHARAGEINTEGERMARRIEDBOOLEANEND,第二章高級(jí)語言及其語法描述,,這說明定義了一個(gè)記錄CARD它是一個(gè)含有三個(gè)分量的記錄結(jié)構(gòu)NAME,字符數(shù)組;AGE,整型量;MARRIED,布爾量。記錄結(jié)構(gòu)的每個(gè)分量(域)所需占用的存儲(chǔ)單元(字節(jié))數(shù),成為該域的長度。當(dāng)知道一個(gè)記錄的地址后,通過每個(gè)域的長度就可算出個(gè)域的地址,因?yàn)槲覀內(nèi)菀淄瞥雒總€(gè)域相對(duì)于記錄結(jié)構(gòu)起點(diǎn)的相對(duì)數(shù)OFFSET此域之前各域長度的總和。,第二章高級(jí)語言及其語法描述,,如就CARD而言,NAME,AGE,MARRIED的相對(duì)數(shù)OFFSET分別為0、20、24。于是,假定CARD的首地址為A,那么,CARDNAME地址為ACARDAGE地址為A20CARDMARRIED地址為A24,第二章高級(jí)語言及其語法描述,,224語句與控制結(jié)構(gòu)一、表達(dá)式一個(gè)表達(dá)式是由運(yùn)算量(亦稱操作數(shù),即數(shù)據(jù)引用或函數(shù)調(diào)用)和算符組成的。對(duì)于大多數(shù)程序語言來說,表達(dá)式的形成規(guī)則可概括為(1)變量(包括下標(biāo)變量)、常數(shù)是表達(dá)式;(2)若E1、E2為表達(dá)式,Θ為二元算符,則E1ΘE2為表達(dá)式;(3)若E為表達(dá)式,Θ為一元算符,則ΘE為表達(dá)式;(4)若E為表達(dá)式,則(E是表達(dá)式。,第二章高級(jí)語言及其語法描述,,在多數(shù)語言中算術(shù)算符和邏輯算符的優(yōu)先順序一般規(guī)定如下乘冪(或↑)一元負(fù)()乘、除(,/,÷)加、減(,)關(guān)系符(,,非(﹁,NOT,或NOT與(∧,S→ASB|AB,第二章高級(jí)語言及其語法描述,,為了對(duì)句子結(jié)構(gòu)進(jìn)行確定性分析,我們往往只考慮最左推導(dǎo)或最右推導(dǎo)。所謂最左推導(dǎo)是指任何一步???都是對(duì)?中的最左非終結(jié)符進(jìn)行替換的。同樣,可定義最右推導(dǎo)。,第二章高級(jí)語言及其語法描述,,232語法分析樹與二義性前面我們提到過可以用一張圖表示一個(gè)句型的推導(dǎo),這種表示稱為語法分析樹,或簡(jiǎn)稱語法樹。語法樹的根結(jié)由開始符號(hào)所標(biāo)記。隨著推導(dǎo)的展開,當(dāng)某個(gè)非終結(jié)符被它的某個(gè)候選式所替換時(shí),這個(gè)非終結(jié)符的相應(yīng)結(jié)就產(chǎn)生了下一代新結(jié)。每個(gè)新結(jié)和其父親結(jié)間都有一條連線。在一棵語法樹生長過程中的任何時(shí)刻,所有那些沒有后代的端末結(jié)自左至右排列起來就是一個(gè)句型。,第二章高級(jí)語言及其語法描述,例如對(duì)于文法(21關(guān)于(III的推導(dǎo)形成語法樹如圖22,,,,圖22語法樹,第二章高級(jí)語言及其語法描述,,一個(gè)句型是否只對(duì)應(yīng)唯一的一棵語法樹呢也就是說它是否只有唯一的一個(gè)最左(最右推導(dǎo)呢不盡然。如文法21,關(guān)于(III就存在一個(gè)與22非常不同的推導(dǎo)E??E?EE?IE?IEE?IIE?III其對(duì)應(yīng)語法樹,,第二章高級(jí)語言及其語法描述,,圖22與圖23的不同之處在于從第二代三代過渡開始。對(duì)于前者,我們選用規(guī)則E→EE,而后者我們選用E→EE。這里不是同代兄弟生兒子的先后次序的不同而是生什么兒子的不同,后面的這個(gè)不同是本質(zhì)上的的差異。這意味著我們可以用兩種完全不同的辦法產(chǎn)生同一個(gè)句子。,第二章高級(jí)語言及其語法描述,,如果一個(gè)文法存在某個(gè)句子對(duì)應(yīng)兩棵不同的語法樹,則稱這個(gè)文法是二義的。也就是說,若一個(gè)文法存在某個(gè)句子,它有兩個(gè)不同的最左(最右推導(dǎo),則這個(gè)文法是法是二義的。最后,作為描述程序語言的上下文無關(guān)文法,我們對(duì)它有幾點(diǎn)限制。(1)文法中不含任何下面形式的產(chǎn)生式P→P因?yàn)檫@種產(chǎn)生式除了產(chǎn)生二義性外沒有任何用處。,第二章高級(jí)語言及其語法描述,,(2)每個(gè)非終結(jié)符P必須有用處。這一方面意味著,必須存在含P的句型;也就是,從開始符號(hào)出發(fā),存在推導(dǎo)S??P?另一方面意味著,必須存在終結(jié)符串??VT,使得P??;也就是,對(duì)于P不存在永不終結(jié)的回路。我們以后所討論的文法均假定滿足上述兩條件。,第二章高級(jí)語言及其語法描述,,233形式語言鳥瞰喬姆斯基把文法分為四種類型即0型、1型、2型、3型。0行強(qiáng)于1型,1行強(qiáng)于2型,2型強(qiáng)于3型。這幾文法的差別在于對(duì)產(chǎn)生式施加不同的限制。我們說GVT,VN,S,?是一個(gè)0型文法,如果它的每個(gè)產(chǎn)生式???是這樣的結(jié)構(gòu)??VN?VT且至少有一個(gè)非終結(jié)符,而??VN?VT。0型文法也稱短語文法。,第二章高級(jí)語言及其語法描述,,如果對(duì)0型文法分別施加以下的第I條限制,則我們就得到第I型文法1G的任何產(chǎn)生式???均滿足|?|≤|?|(其中|?|和|?|分別為?和?的長度;僅S??例外,但S不得出現(xiàn)在任何產(chǎn)生式的右部。2)G的任何產(chǎn)生式為A??,A?VN,??VN?VT。3G的任何產(chǎn)生式為A??B或A??,其中??VT,A、B?VN。其中1型文法也稱上下文有關(guān)文法。這種文法意味著,對(duì)非終結(jié)符進(jìn)行替換式務(wù)必考慮上下文并且一般不允許替換成空串?。,第二章高級(jí)語言及其語法描述,,2型文法也稱上下文無關(guān)文法,注意其語言定義G的任何產(chǎn)生式為A→Β,A∈VN,Β∈(VN∪VT表明凡出現(xiàn)在產(chǎn)生式左邊的符號(hào)都是非終結(jié)符。3型文法也稱右線性文法。3型文法還有另一種形式,稱左線性文法一個(gè)文法G為左線性文法,如果G的任何產(chǎn)生式為A→B?或A→?,其中?∈VT,A、B∈VN由于3型文法等價(jià)于正規(guī)式所以也稱正規(guī)文法。,第二章高級(jí)語言及其語法描述,例題與習(xí)題解答,例21試構(gòu)造生成語言L{ANBNCI|N?1,I?0}的文法解GZZ?ABA?AAB|ABB?CB|?例22已知語言L{ANBBN|N?1},寫出產(chǎn)生L的文法。,,,第二章高級(jí)語言及其語法描述,,解GSS?AABA?AAB|B例23已知文法G{A,B,C},{A,B,C},A,P其中產(chǎn)生式P由以下組成A?ABCA?ABBCBB?BBBC?CBCCBC?CBAC?AABAC?AA問此文法表式的語言是什么,第二章高級(jí)語言及其語法描述,,解由于A為開始符。由于A?ABBC?ABBC?ABCBCC?ACBBCC?AABBCC語言為{ANBNCN,N0}例24試構(gòu)造語言L{ANBNCI|N1,I0}的文法。解GZZ?ABA?AAB|ABB?CB|?,第二章高級(jí)語言及其語法描述,,例25試寫一文法,使其描述的語言LG是能被5整除的整數(shù)集合。解GZZ?|A0|5A?0|1|2|3|4|5|6|7|8|9|AA例26已知語言L{X|X?{A,B,C},且X重復(fù)排列是對(duì)稱的(AABCBAA,AABBAA,等寫出該語言的文法。解GZZ?AZA|BZB|CZC|A|B|C|?,
下載積分: 6 賞幣
上傳時(shí)間:2024-01-06
頁數(shù): 53
大?。?0.24(MB)
子文件數(shù):