日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C—的BNF语法

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C—的BNF语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近期用到ABB機器人,RAPID使用BNF語法規則描述,所以不得不復習了一下BNF語法描述規則,通過C的BNF描述,喚醒我的記憶 %>_<% C—的BNF語法如下:? 1. program ?→ ?declaration-list ? 2. declaration-list → declaration-list ?declaration | declaration ?3. declaration → var-declaration | fun-declaration ? 4. var-declaration → type-specifier ID ?| type-specifier ID [ NUM ] ? 5. type-specifier → int | void | float ? 6. fun-declaration → type-specifier ID(params) ?compound-stmt 7. params → params-list | void ? 8. param-list → param-list,param | param ? 9. param → type-specifier ID| type-specifier ID[] ? 10. compound-stmt → { local-declarations statement-list } ? 11. local-declarations → local-declarations var-declaration | empty ?12. statement-list → statement-liststatement | empty ? 13. statement → expression-stmt | compound-stmt | selection-stmt ?| iteration-stmt | return-stmt ? 14. expression-stmt → expression;|; ? 15. selection-stmt → if (expression) statement ?| if (expression) statement else statement ? 16. iteration-stmt → while (expression) statement ?17. return-stmt → return; | return expression; ? 18. expression → var = expression | simple-expression ?19. var → ID | ID[expression] ? 20. simple-expression → additive-expression relop additive-expression | ?additive-expression ? 21. relop → <= | < | > | >= | = = | != | && | || ? 22. additive-expression → additive-expression addop term | term ?23. addop → + | - ? 24. term → term mulopfactor | factor ?25. mulop → * | / ? 26. factor → (expression) | var | call | NUM ?27. call → ID (args) ? 28. args → arg-list |empty ? 29. arg-list → arg-list,expression | expression? 下面是對以上每條文法規則,給出了相關語義的簡短解釋。 ? 1.program → declaration-list ? 2.declaration-list → declaration-list declaration | declaration ? 3.declaration → var-declaration | fun-declaration ? 程序由聲明的列表(或序列)組成,聲明可以是函數或變量聲明,順序是任意的。至少必須有 一個聲明。接下來是語義限制(這些在C中不會出現)。所有的變量和函數在使用前必須聲明 (這避免了向后backpatching引用)。程序中最后的聲明必須是一個函數聲明,名字為main。 注意,C1缺乏原型,因此聲明和定義之間沒有區別(像C一樣)。 ? 4.var-declaration → type-specifier ID ?| type-specifier ID[NUM]; ? 5.type-specifier → int | void | float 變量聲明或者聲明了簡單的整數或浮點類型變量,或者是基類型為整數或浮點的數組變量,?索引范圍從0到NUM-1。注意,在C1中僅有的基本類型是整型和空類型。在一個變量聲明中,?只能使用類型指示符int。void用于函數聲明(參見下面)。也要注意,每個聲明只能聲明一 個變量。 ? 6.fun-declaration → type-specifier ID(params) compound-stmt ? 7.params → param-list | void ? 8.param-list → param-list , param | param ? 9.param → type-specifier ID |type-specifier ID[] ?函數聲明由返回類型指示符、標識符以及在圓括號內的用逗號分開的參數列表組成,后面跟 著一個復合語句,是函數的代碼。如果函數的返回類型是void,那么函數不返回任何值(即 是一個過程)。函數的參數可以是void(即沒有參數),或者一列描述函數的參數。參數后面 跟著方括號是數組參數,其大小是可變的。簡單的整型參數由值傳遞。數組參數由引用來傳 遞(也就是指針),在調用時必須通過數組變量來匹配。注意,類型“函數”沒有參數。一個 函數參數的作用域等于函數聲明的復合語句,函數的每次請求都有一個獨立的參數集。函數 可以是遞歸的(對于使用聲明允許的范圍)。 ? 10.compound-stmt → { local-declarations statement-list } ? 復合語句由用花括號圍起來的一組聲明和語句組成。復合語句通過用給定的順序執行語句序 列來執行。局部聲明的作用域等于復合語句的語句列表,并代替任何全局聲明。 ? 11.local-declarations → local-declarations var-declaration | empty ? 12.statement-list → statement-list statement | empty ? 注意聲明和語句列表都可以是空的(非終結符empty表示空字符串,有時寫作ε。) ? 13.statement → expression-stmt ?| compound-stmt ?| selection-stmt ?| iteration-stmt ?| return-stmt ? 14.expression-stmt → expression; | ?? 表達式語句有一個可選的且后面跟著分號的表達式。這樣的表達式通常求出它們一方的結 果。因此,這個語句用于賦值和函數調用。 ? 15.selection-stmt → if (expression) statement ?| if (expression) statement else statement ? if語句有通常的語義:表達式進行計算;非0值引起第一條語句的執行;0值引起第二條語句的執行,如果它存在的話。這個規則導致了典型的懸掛else二義性,可以用一種標準的方法解決:else部分通常作為當前if的一個子結構立即分析(“最近嵌套”非二義性規則)。 ? 16.iteration-stmt → while (expression) statement ? while語句是C-中唯一的重復語句。它重復執行表達式,并且如果表達式的求值為非0,則 執行語句,當表達式的值為0時結束。 ? 17.return-stmt → return; | return expression ?返回語句可以返回一個值也可無值返回。函數沒有說明為void就必須返回一個值。函數聲明? 為void就沒有返回值。return引起控制返回調用者(如果它在main中,則程序結束)。 ? 18.expression → var=expression | simple-expression ? 19.var→ ID | ID[expression] ? 表達式是一個變量引用,后面跟著賦值符號(等號)和一個表達式,或者就是一個簡單的表達 式。賦值有通常的存儲語義:找到由var表示的變量的地址,然后由賦值符右邊的子表達式 進行求值,子表達式的值存儲到給定的地址。這個值也作為整個表達式的值返回。var是簡 單的(整型)變量或下標數組變量。負的下標將引起程序停止(與C不同)。然而,不進行下標 越界檢查。 ? var表示C1比C的進一步限制。在C中賦值的目標必須是左值(l-value),左值是可以由許多操? 作獲得的地址。在C1中唯一的左值是由var語法給定的,因此這個種類按照句法進行檢查, 代替像C中那樣的類型檢查。故在C1中指針運算是禁止的。 ? 20.simple-expression → additive-expression relop additive-expression ?|additive-expression ? 21.relop → <= | < | > | >= | == | != | && | || ? 簡單表達式由無結合的關系操作符組成(即無括號的表達式僅有一個關系操作符)。簡單表達 式在它不包含關系操作符時,其值是加法表達式的值,或者如果關系算式求值為ture,其值 為1,求值為false時值為0。 ? 22.additive-expression → additive-expression addop term | term?23.addop → + | - ? 24.term → term mulop factor | factor ? 25.mulop → * | / ?? 加法表達式和項表示了算術操作符的結合性和優先級。/符號表示整數除;即任何余數都被 截去。 ? 26.factor → (expression) | var | call | NUM ? 因子是圍在括號內的表達式;或一個變量,求出其變量的值;或者一個函數調用,求出函數 的返回值;或者一個NUM,其值由掃描器計算。數組變量必須是下標變量,除非表達式由單個ID組成,并且以數組為參數在函數調用中使用(如下所示)。? 27.call → ID(args) ? 28.args → arg-list | empty ? 29.arg-list → arg-list,expression | expression ? 函數調用的組成是一個ID(函數名),后面是用括號圍起來的參數。參數或者為空,或者由逗 號分割的表達式列表組成,表示在一次調用期間分配的參數的值。函數在調用之前必須聲明, 聲明中參數的數目必須等于調用中參數的數目。函數聲明中的數組參數必須和一個表達式匹 配,這個表達式由一個標識符組成表示一個數組變量。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的C—的BNF语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。