Cminus語言的BNF語法定義(精)_第1頁
Cminus語言的BNF語法定義(精)_第2頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C_minus語言的BNF語法定義C_minus語言的BNF語法定義如下:1. programfdeclaration-list2. declaration-listfdeclaration-listdeclarationldeclaration3. declarationfvar-declarationlfun-declaration4. var-declarationftype-specifierID;|type-specifierIDNUM;5. type-specifierfint|void6. fun-declarationftype-specifierID(params)|comp

2、ound-stmt7. paramsfparams-list|void8. param-listfparam-list,param|param9. paramftype-specifierID|type-specifierID10. compound-stmtflocal-declarationsstatement-listll.local-declarationsflocal-declarationsvar-declaration|empty12. statement-listfstatement-liststatement|empty13. statementfexpression-stm

3、t|compound-stmt|selection-stmtliteration-stmtlreturn-stmt14. expression-stmtfexpression;*15. selection-stmtfif(expression)statementlif(expression)statementelsestatement16.iteration-stmtfwhile(expression)statement17. return-stmtfreturn;lreturnexpression;18. expressionfvar=expressionlsimple-expression

4、19. varfID|IDexpression20. simple-expressionfadditive-expressionrelopadditive-expression|additive-expression21. relopfv=|v|>|>=|=|!=22. additive-expressionfadditive-expressionaddopterm|term23. addopf+|-24. termftermmulopfactor|factor25. mulopf*|/26. factorf(expression)|var|call|NUM27. callfID(

5、args)28. argsfarg-list|empty29. arg-listfarg-list,expression|expression以下是對C_minus語言的文法定義的一些說明。對以上每條文法規(guī)則,給出了相關(guān)語義的簡短解釋如下:Lprogramdeclaration-list2. declaration-listfdeclaration-listIdeclaration|declaration3. declarationfvar-declaration|fun-declaration程序由聲明的列表(或序列)組成,聲明可以是函數(shù)或變量聲明,順序是任意的。至少必須有一個(gè)聲明。接下來是

6、語義限制(這些在C中不會(huì)出現(xiàn))。所有的變量和函數(shù)在使用前必須聲明(這避免了向后backpatching引用)。程序中最后的聲明必須是一個(gè)函數(shù)聲明,名字為main。注意,C缺乏原型,因此聲明和定義之間沒有區(qū)別(像C一樣)。4. var-declarationtype-specifierID;|type-specifierIDNUM;5. type-specifierfintlvoid變量聲明或者聲明了簡單的整數(shù)類型變量,或者是基類型為整數(shù)的數(shù)組變量,索引范圍從0到NUM-1。注意,在C中僅有的基本類型是整型和空類型。在一個(gè)變量聲明中,只能使用類型指示符intovoid用于函數(shù)聲明(參見下面)。也

7、要注意,每個(gè)聲明只能聲明一個(gè)變量。6. fun-declarationftype-specifierID(params)compound-stmt7. paramsparam-listlvoid8. param-listparam-list,paramlparam9. paramtype-specifierIDItype-specifierID函數(shù)聲明由返回類型指示符、標(biāo)識(shí)符以及在圓括號內(nèi)的用逗號分開的參數(shù)列表組成,后面跟著一個(gè)復(fù)合語句,是函數(shù)的代碼。如果函數(shù)的返回類型是void,那么函數(shù)不返回任何值(即是一個(gè)過程)。函數(shù)的參數(shù)可以是void(即沒有參數(shù)),或者一列描述函數(shù)的參數(shù)。參數(shù)后面跟著

8、方括號是數(shù)組參數(shù),其大小是可變的。簡單的整型參數(shù)由值傳遞。數(shù)組參數(shù)由引用來傳遞(也就是指針),在調(diào)用時(shí)必須通過數(shù)組變量來匹配。注意,類型“函數(shù)”沒有參數(shù)。一個(gè)函數(shù)參數(shù)的作用域等于函數(shù)聲明的復(fù)合語句,函數(shù)的每次請求都有一個(gè)獨(dú)立的參數(shù)集。函數(shù)可以是遞歸的(對于使用聲明允許的范圍)。10. compound-stmtlocal-declarationsstatement-list復(fù)合語句由用花括號圍起來的一組聲明和語句組成。復(fù)合語句通過用給定的順序執(zhí)行語句序列來執(zhí)行。局部聲明的作用域等于復(fù)合語句的語句列表,并代替任何全局聲明。11.local-declarationsflocal-declarati

9、onsvar-declarationlempty12. statement-liststatement-liststatementlempty注意聲明和語句列表都可以是空的(非終結(jié)符empty表示空字符串,有時(shí)寫作。)13. statementexpression-stmt|compound-stmt|selection-stmtliteration-stmtlreturn-stmt14. expression-stmtexpression;#表達(dá)式語句有一個(gè)可選的且后面跟著分號的表達(dá)式。這樣的表達(dá)式通常求出它們一方的結(jié)果。因此,這個(gè)語句用于賦值和函數(shù)調(diào)用。15. selection-stmt

10、fif(expression)statementlif(expression)statementelsestatementif語句有通常的語義:表達(dá)式進(jìn)行計(jì)算;非0值引起第一條語句的執(zhí)行;0值引起第二條語句的執(zhí)行,如果它存在的話。這個(gè)規(guī)則導(dǎo)致了典型的懸掛else二義性,可以用一種標(biāo)準(zhǔn)的方法解決:else部分通常作為當(dāng)前if的一個(gè)子結(jié)構(gòu)立即分析(“最近嵌套”非二義性規(guī)則)。16.iteration-stmtfwhile(expression)statementwhile語句是C中唯一的重復(fù)語句。它重復(fù)執(zhí)行表達(dá)式,并且如果表達(dá)式的求值為非0,則執(zhí)行語句,當(dāng)表達(dá)式的值為0時(shí)結(jié)束。17. return

11、-stmtfreturn;lreturnexpression;返回語句可以返回一個(gè)值也可無值返回。函數(shù)沒有說明為void就必須返回一個(gè)值。函數(shù)聲明為void就沒有返回值。return引起控制返回調(diào)用者(如果它在main中,則程序結(jié)束)。18. expressionfvar=expression|simple-expression19. varfID|IDexpression表達(dá)式是一個(gè)變量引用,后面跟著賦值符號(等號)和一個(gè)表達(dá)式,或者就是一個(gè)簡單的表達(dá)式。賦值有通常的存儲(chǔ)語義:找到由var表示的變量的地址,然后由賦值符右邊的子表達(dá)式進(jìn)行求值,子表達(dá)式的值存儲(chǔ)到給定的地址。這個(gè)值也作為整個(gè)表達(dá)

12、式的值返回。var是簡單的(整型)變量或下標(biāo)數(shù)組變量。負(fù)的下標(biāo)將引起程序停止(與C不同)。然而,不進(jìn)行下標(biāo)越界檢查。var表示C比C的進(jìn)一步限制。在C中賦值的目標(biāo)必須是左值(l-value),左值是可以由許多操作獲得的地址。在C中唯一的左值是由var語法給定的,因此這個(gè)種類按照句法進(jìn)行檢查,代替像C中那樣的類型檢查。故在C中指針運(yùn)算是禁止的。20. simple-expressionfadditive-expressionrelopadditive-expressionladditive-expression21. relopfv=lvl>l>=l=l!=簡單表達(dá)式由無結(jié)合的關(guān)系操

13、作符組成(即無括號的表達(dá)式僅有一個(gè)關(guān)系操作符)。簡單表達(dá)式在它不包含關(guān)系操作符時(shí),其值是加法表達(dá)式的值,或者如果關(guān)系算式求值為ture,其值為1,求值為false時(shí)值為0。22. additive-expressionfadditive-expressionaddoptermlterm23. addopf+|-24. termftermmulopfactorlfactor25. mulopf*|/加法表達(dá)式和項(xiàng)表示了算術(shù)操作符的結(jié)合性和優(yōu)先級。符號表示整數(shù)除;即任何余數(shù)都被截去。26. factorf(expression)|var|call|NUM因子是圍在括號內(nèi)的表達(dá)式;或一個(gè)變量,求出其變量的值;或者一個(gè)函數(shù)調(diào)用,求出函數(shù)的返回值;或者一個(gè)NUM,其值由掃描器計(jì)算。數(shù)組變量必須是下標(biāo)變量,除非表達(dá)式由單個(gè)ID組成,并且以數(shù)組為參數(shù)在函數(shù)調(diào)用中使用(如下所示)。27. callfID(args)28. argsfarg-list|empty29. arg-listfarg-list,expression|expression函數(shù)調(diào)用的組成是一個(gè)ID(函數(shù)名),后面是用括號圍起來的參數(shù)。參數(shù)或者為空,或者由逗號分割的表達(dá)式列表組成,表示在一次調(diào)用期間分配的參數(shù)的值。函數(shù)在調(diào)用之前必須聲明,聲明中參數(shù)的數(shù)目必須等于調(diào)用中參數(shù)的數(shù)目。函數(shù)聲明中的數(shù)組參數(shù)必須和一個(gè)表達(dá)式匹配,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論