語意理論:結構化程式語言

在結構化的程式語言 (例如 C , C# 等) 中,『指定、運算、循序、分支、迴圈、函數』等是主要的結構,表格 7.2顯示了結構化程式的構造方式,讓我們來看看這些結構所隱含的語意。

表格 7.2結構化程式的構造方式

結構類型 語法 範例
指定結構 <ASSIGN> ::= <VAR> = <EXP> x = 3*y+5
運算結構 <EXP> ::= <T> { ["+"|"-"] <T> } 3*y+5
循序結構 <BASE_LIST > ::= { <BASE> } t=a; a=b; b=t;
分支結構 <IF> ::= if (<COND>) <BASE> { else if (<COND>) <BASE> } [else <BASE> ] if (a>b) c=a; else c=b;
迴圈結構 <WHILE> ::= while (<COND>) <BASE> while (i<=10) { sum = sum+i; i++;}
函數結構 <FUNC_DEF> ::= <FUNC>({<ARGS>}) <BLOCK> <FUNC_CALL>::= <FUNC>({<PARAMS>}); 定義:max(a,b) {if (a>b) return a; else return b;} 呼叫:c = max(3,5);

指定結構的語法是 <VAR> = <EXP>,其意義乃是將 <EXP> 的運算結果傳送給變數 <VAR>,於是,<VAR> 變數將會設定為 <EXP> 的數值。舉例而言,指定敘述 x = 3*y+5 會將 3*y+5 的結果傳送給 x,假如 y 的值為 4,則執行完後 x 的值將變成 17。

運算結構的語法是從數學中借用過來的,基本上圖 7.10的四個規則就是運算結構的語法??但表7.2中只有加、減??。其語意正是數學中的加減乘除之語意,舉例而言,規則 <EXP> ::= <T> { ["+"|"-"] <T> } 定義了加減的語法,而其語意則是將 <T>+<T> 或 <T>-<T> 的結果傳回。

循序結構的語法是{ <BASE> },代表 <BASE> 可以連續出現很多次,其意義是順序執行每個 <BASE> 敘述,例如像 t=a; a=b; b=t; 這樣的語句,其意義是當 t=a 執行完後,接著執行 a=b,然後再執行 b=t。

分支結構可以用 if (<COND>) <BASE> { else if (<COND>) <BASE> } [else <BASE> ] 這樣的語法表示,其意義是當條件 <COND> 成立時,就執行值型對應的 <BASE> ,如果都不成立,則執行最後的 else 語句,例如像 if (a>b) c=a; else c=b; 這樣的語句,其意義是當 a>b 條件成立時,就執行c=a,否則,就執行 else 中的敘述 c=b。

迴圈結構通常有 for 迴圈與 while 迴圈,其中,while 迴圈的語法為 while (<COND>) <BASE>,其意義是當是當 <COND> 條件成立時,就繼續執行 <BASE> 區塊??<BASE>是一個區塊嗎??,直到 <COND> 條件不成立才離開 while 迴圈。例如,while (i<=10) { sum = sum+i; i++;} 這樣的語句,在 i<=10 時,會執行 { sum = sum +I; i++; } 區塊,直到 i大於10為止。

函數結構的語法可用 <FUNC> ({<ARGS>}) <BLOCK> 的方式定義,例如,max(a,b) {if (a>b) return a; else return b;} 這樣的函數 max,可用來取得 a, b 中的較大值直傳回。接著,我們可用 max(3,5) 這樣的語句呼叫,將 3 傳給a, 5傳給b,其語法為<FUNC>({<PARAMS>}); 的方式呼叫,呼叫時會將 <PARAMS> 中的引數,傳遞給 <ARGS> 參數,然後開始才開始執行 <BLOCK> 區塊的程式。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License