郭俊鳳 王開(kāi)鑄
摘要:本文就C語(yǔ)言程序設(shè)計(jì)知識(shí)體系結(jié)構(gòu)進(jìn)行深入的分析與歸納,提出C語(yǔ)言程序設(shè)計(jì)的語(yǔ)法方面的知識(shí)體系結(jié)構(gòu)。首先,討論知識(shí)體系結(jié)構(gòu)中各概念的定義;其次,分別給出C語(yǔ)言的語(yǔ)法知識(shí)體系和程序設(shè)計(jì)的語(yǔ)法知識(shí)體系。為設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)題庫(kù)提供理論基礎(chǔ)。
關(guān)鍵詞:知識(shí)體系;C語(yǔ)言程序設(shè)計(jì);C語(yǔ)言語(yǔ)法;C程序語(yǔ)法
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
1知識(shí)體系
定義1:知識(shí)是指特定事物、普遍事理、方法、過(guò)程、式樣、結(jié)構(gòu)和原理等在大腦中的記憶,以及它們間的關(guān)系的記憶。知識(shí)是無(wú)限的,而結(jié)合某一領(lǐng)域的知識(shí)卻是有限的。也就是說(shuō),C語(yǔ)言程序設(shè)計(jì)知識(shí)體系結(jié)構(gòu)中有關(guān)它們的語(yǔ)法知識(shí)體系是客觀存在的。
定義2:知識(shí)點(diǎn)是指具體領(lǐng)域中符合定義1的知識(shí)。知識(shí)的表現(xiàn)形式是概念、判斷、推理。其中概念分為具體概念和抽象概念。它們的表現(xiàn)形式是具體事物和抽象名詞。2500年前荀況稱它們?yōu)閷?shí)知和名知。而判斷是描述事物的屬性或事物間的關(guān)系,他們的表現(xiàn)形式是由詞語(yǔ)組成的命題,即陳述句;推理是一段原委的敘述,它由一個(gè)或多個(gè)句子組成。從它們的語(yǔ)義內(nèi)容來(lái)看,C語(yǔ)言知識(shí)可以分為14類:定義,功能,組成,作用,特征,區(qū)別,算法,分類,原理,方法,策略,過(guò)程,應(yīng)用,方法。
定義3:知識(shí)單元是指知識(shí)在語(yǔ)義上是同一概念的性質(zhì)和(或)同一種屬關(guān)系等知識(shí)組成的知識(shí)點(diǎn)集合。知識(shí)單元的大小是與知識(shí)單元中知識(shí)點(diǎn)的多少成正比。而由可滿足某一應(yīng)用的最少知識(shí)點(diǎn)組成的知識(shí)單元稱為獨(dú)立知識(shí)單元。例如:C語(yǔ)言的常量是一個(gè)知識(shí)單元,而常量中的十進(jìn)制常量是一個(gè)獨(dú)立知識(shí)單元。
定義4:知識(shí)塊是指在語(yǔ)義上有聯(lián)系的若干個(gè)知識(shí)單元的集合。知識(shí)塊的大小與集合中知識(shí)單元的多少成正比。而由可滿足某些應(yīng)用的最少獨(dú)立知識(shí)單元組成的知識(shí)塊稱為獨(dú)立知識(shí)塊。例如:C語(yǔ)言中的基本數(shù)據(jù)類型是一個(gè)知識(shí)塊,而十進(jìn)制數(shù)據(jù)類型、值域和對(duì)應(yīng)的運(yùn)算符是一個(gè)獨(dú)立知識(shí)塊。
定義5:知識(shí)體系是指能夠構(gòu)成一個(gè)完整應(yīng)用的若干的知識(shí)塊的結(jié)合。知識(shí)體系的大小是與知識(shí)塊的多少成正比的。而構(gòu)成一個(gè)最小的完整應(yīng)用的最少知識(shí)塊的集合稱為獨(dú)立知識(shí)體系。
定義6:知識(shí)體系結(jié)構(gòu)是指知識(shí)體系中知識(shí)點(diǎn)間和(或)知識(shí)單元間和(或)知識(shí)塊間具有橫向的直接或間接關(guān)系的知識(shí)體系。例如:數(shù)組是一個(gè)知識(shí)塊,指針也是一個(gè)知識(shí)塊。那么指針數(shù)組或數(shù)組指針是這兩個(gè)知識(shí)橫向聯(lián)系產(chǎn)生的知識(shí)塊。具有這樣知識(shí)塊的知識(shí)體系稱為知識(shí)體系結(jié)構(gòu)。知識(shí)體系結(jié)構(gòu)也存在一個(gè)基本的知識(shí)體系結(jié)構(gòu)。
領(lǐng)域知識(shí)體系結(jié)構(gòu)是指一個(gè)具體領(lǐng)域的知識(shí)體系結(jié)構(gòu),本文就是探討和提出“C語(yǔ)言程序設(shè)計(jì)”這個(gè)具體領(lǐng)域的知識(shí)體系結(jié)構(gòu)。
2C語(yǔ)言程序設(shè)計(jì)的知識(shí)體系
現(xiàn)用backus的元語(yǔ)言來(lái)描述C語(yǔ)言程序設(shè)計(jì)的知識(shí)體系。該元語(yǔ)言有三個(gè)符號(hào):<>、??=、|,其中,<>里面存放非終極符,??=是將其左邊的非終極符替換成其右邊的內(nèi)容。|表示“或者”。例如:<字>??=<字母>|<數(shù)字>|<特殊符號(hào)>是一個(gè)元語(yǔ)言的表示,其意思是字可被替換成字母或者數(shù)字或者特殊符號(hào)。<函數(shù)>??=<函數(shù)頭><函數(shù)體>。其意思是函數(shù)可被替換成函數(shù)頭和函數(shù)體?;蛘哒f(shuō),函數(shù)是由函數(shù)頭和函數(shù)體兩部分組成。本文為了研究方便,把可選項(xiàng)括在元符號(hào)“[”和“]”中。
這三個(gè)產(chǎn)生式表示C語(yǔ)言程序設(shè)計(jì)知識(shí)體系由六個(gè)知識(shí)體系組成的。其中,C語(yǔ)言語(yǔ)法知識(shí)體系是指C語(yǔ)言的組成及其每個(gè)成分的組成規(guī)則。同理,C程序設(shè)計(jì)的語(yǔ)法知識(shí)體系是指該程序的組成及其每個(gè)成分的組成規(guī)則。
C語(yǔ)言語(yǔ)義知識(shí)體系是指C語(yǔ)言的各個(gè)成分的含義及其在語(yǔ)境中的含義。同理,C程序設(shè)計(jì)的語(yǔ)義是指程序的各個(gè)成分的含義及其在語(yǔ)境中的含義。
語(yǔ)用原本是描述該語(yǔ)言成分在計(jì)算機(jī)中如何實(shí)現(xiàn)的含義,即計(jì)算機(jī)受到程序的“刺激”后,它有什么反應(yīng)。當(dāng)語(yǔ)用這個(gè)詞用在程序設(shè)計(jì)中時(shí),是指使用者用程序的成分、部分、整體在解題中的用途。即它們的功能。惟獨(dú)語(yǔ)用在這一點(diǎn)上,它的知識(shí)體系是無(wú)限的。
本文僅探討C語(yǔ)言語(yǔ)法知識(shí)體系和C程序設(shè)計(jì)語(yǔ)法知識(shí)體系。
3C語(yǔ)言語(yǔ)法知識(shí)體系
3.1字
<字>??=<字母>|<數(shù)字>|<特殊符號(hào)>
<字母>??=<大寫(xiě)字母>|<小寫(xiě)字母>
<大寫(xiě)字母>??=A|B|C|……|Z
<小寫(xiě)字母>??=a | b | c |……| z
<數(shù)字>??=0 | 1 | 2 | 3 |……| 9
<特殊符號(hào)>??= +|–|*|/|%|<|>|=|&|||! | : |, |; |. |_|#|″|′||~|∧|?|空格符|[|]|{|}|(|) ,由上可知,C語(yǔ)言有92個(gè)字。
3.2詞
<詞>??=<標(biāo)識(shí)符>|<關(guān)鍵詞>|<運(yùn)算符>|<分隔符>|<常量>|<注釋符>
<標(biāo)識(shí)符>??=<字母>|<下劃線>|<標(biāo)識(shí)符><數(shù)字>|<標(biāo)識(shí)符><字母>|<標(biāo)識(shí)符><下劃線>
<關(guān)鍵詞>??=auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned| void|volatile|while
<運(yùn)算符>??=<成員類運(yùn)算符>|<目類運(yùn)算符>|<乘法類運(yùn)算符>|<加法類運(yùn)算符>|<移位類運(yùn)算符>|<關(guān)系類運(yùn)算符>|<等號(hào)類運(yùn)算符>|<位運(yùn)算符>|<邏輯運(yùn)算符>|<條件運(yùn)算符>|<賦值類運(yùn)算符>| <逗號(hào)運(yùn)算符>
<成員運(yùn)算符>??=() | [] | . | –>
<目類運(yùn)算符>??= ! | ~ | ++ | – – | – |(類型)| * | & | sizeof
<乘法類運(yùn)算符>??=* | / | %
<加法類運(yùn)算符>??= +| –
<移位類運(yùn)算符>??=<< | >>
<關(guān)系類運(yùn)算符>??=< | <= | > | >=
<等號(hào)類運(yùn)算符>??= != | = =
<位類運(yùn)算符>??= & | ∧| |
<邏輯類運(yùn)算符>??=&& | ||
<條件運(yùn)算符>??=?:
<賦值類運(yùn)算符>??= += | – =| *= | /= | %= | < <= | >>= | &=| ∧= | != | =
<逗號(hào)運(yùn)算符>??=,
<分隔符>??=,| 空格符 | ; | : | {}
<注釋符>??= /* */
<常量>??=<數(shù)值常量>|<字符常量>|<字符串常量>
<數(shù)值常量>??=<十進(jìn)制常量>|<八進(jìn)制常量>|<十六進(jìn)制常量>
<十進(jìn)制常量>??=<整數(shù)>|<實(shí)數(shù)>|<科學(xué)數(shù)表示>
<整數(shù)>??= <無(wú)符號(hào)整數(shù)>|+<無(wú)符號(hào)整數(shù)>|-<無(wú)符號(hào)整數(shù)
<無(wú)符號(hào)整數(shù)>??=<數(shù)字>|<無(wú)符號(hào)整數(shù)><數(shù)字>
<實(shí)數(shù)>??=<無(wú)符號(hào)整數(shù)>|<十進(jìn)制小數(shù)>|<無(wú)符號(hào)小數(shù)><十進(jìn)制小數(shù)>
<十進(jìn)制小數(shù)>??=.<無(wú)符號(hào)整數(shù)>
<科學(xué)數(shù)表示>??=<實(shí)數(shù)><指數(shù)>
<指數(shù)>??=e<整數(shù)>|E<整數(shù)>
<八進(jìn)制常量>??=<八進(jìn)制整數(shù)>
<八進(jìn)制整數(shù)>??=0<八進(jìn)制數(shù)字>
<八進(jìn)制數(shù)字>??=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
<十六進(jìn)制常量>??=<十六進(jìn)制整數(shù)>
<十六進(jìn)制整數(shù)>??=0x<十六進(jìn)制數(shù)字>
<十六進(jìn)制數(shù)字>??=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F
<字符常量>??=<字>
<字符串常量>??=”<字符串>”
<字符串>??=<字>|<字符串><字>
由上可知,C語(yǔ)言有六類詞,除關(guān)鍵詞有32個(gè),運(yùn)算符43個(gè),分隔符有5個(gè),注釋符有1個(gè)以外,每類詞都有自己的組成規(guī)則。符合規(guī)則的詞為正確的詞,否則為錯(cuò)誤的詞。共有上述18條規(guī)則。
3.3詞組
C語(yǔ)言只有一種詞組,稱為表達(dá)式。表達(dá)式是由運(yùn)算符與運(yùn)算對(duì)象組成的。C語(yǔ)言的基本表達(dá)式有15個(gè),基本表達(dá)式是指一個(gè)運(yùn)算符和它的運(yùn)算對(duì)象組成的。它們是:
<表達(dá)式>??=<本原表達(dá)式>|*<表達(dá)式>|&<表達(dá)式>|-<表達(dá)式>|!<表達(dá)式>|~<表達(dá)式>|++<類值>|– –<類值>|<類值>++|<類值>– –|sizeof<表達(dá)式>|(類型名)<表達(dá)式>|<表達(dá)式><二目運(yùn)算符><表達(dá)式>|<表達(dá)式>?<表達(dá)式>:<表達(dá)式>|<表達(dá)式>,<表達(dá)式>
<本原表達(dá)式>??=<標(biāo)識(shí)符>|<常量>|<字符串>|<表達(dá)式>|<本原表達(dá)式>(<表達(dá)式表>opt)|<本原表達(dá)式>[<表達(dá)式>]|<類值>.<標(biāo)識(shí)符>|<本原表達(dá)式>-><標(biāo)識(shí)符>
<類值>??=<標(biāo)識(shí)符>|<本原表達(dá)式>[<表達(dá)式>]|<類值>.<標(biāo)識(shí)符>|<本原表達(dá)式>-><標(biāo)識(shí)符>|*<表達(dá)式>|(<類值>)
<本原表達(dá)式運(yùn)算符>??= () | [] | . | –>
它們具有最高優(yōu)先級(jí)。它們的結(jié)合性是從左到右的。
<一目運(yùn)算符>??= * | & | – | ! | ~ | ++ | – – | sizeof | (<類型名>)
它們的優(yōu)先級(jí)僅次于本原表達(dá)式運(yùn)算符,而高于任何二目運(yùn)算符的優(yōu)先級(jí)。它們的結(jié)合性是從右到左的。
<二目運(yùn)算符>??= * | / | % | + | – | >> | << | < | > | <= | >= | = = | != | & |∧| | | && | || |
它們的優(yōu)先級(jí)僅次于一目運(yùn)算符,高于賦值運(yùn)算符的優(yōu)先級(jí)。它們的結(jié)合性是從左到右的。它們間的優(yōu)先級(jí)是按它們的排序遞減的。
<三目運(yùn)算符>??=? :
它們的優(yōu)先級(jí)次于一目運(yùn)算符和二目運(yùn)算符,高于賦值運(yùn)算符。它的結(jié)合性是自右至左的。
<賦值運(yùn)算符>??= =| += | – = | *= | /= | %= | >>= | <<= | &= | ∧= | !=
它們的優(yōu)先級(jí)次于二目運(yùn)算符的優(yōu)先級(jí),高于逗號(hào)運(yùn)算符的優(yōu)先級(jí)。所有的賦值運(yùn)算符具有同一個(gè)優(yōu)先級(jí),同時(shí),它們的結(jié)合性是從右到左的。
<逗號(hào)運(yùn)算符>??=,
逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低,而它的結(jié)合性是從左到右的。
3.4句
<句>??=<類型說(shuō)明句>|<執(zhí)行句>
<類型說(shuō)明句>??=<類型說(shuō)明句區(qū)分符>|[<初始化說(shuō)明符表>];
<類型說(shuō)明句區(qū)分符>??=<類型區(qū)分符>[<初始化說(shuō)明符表>] |<存儲(chǔ)級(jí)區(qū)分符>[<初始化說(shuō)明符表>]
<存儲(chǔ)級(jí)區(qū)分符>??=auto | static | extern | register | typedef
<類型區(qū)分符>??=char | int | short | long | unsigned | float | double | <構(gòu)造型區(qū)分符> | <類型定義名>
<初始化說(shuō)明符>??=<說(shuō)明符>[<初始化>]
<說(shuō)明符>??=<標(biāo)識(shí)符>|(<說(shuō)明符>)|<說(shuō)明符>[<常量表達(dá)式>]
<構(gòu)造型區(qū)分符>??=<結(jié)構(gòu)聯(lián)合區(qū)分符>|<枚舉區(qū)分符>
<結(jié)構(gòu)聯(lián)合區(qū)分符>??=struct{<結(jié)構(gòu)說(shuō)明句表>} |struct<標(biāo)識(shí)符>{<結(jié)構(gòu)說(shuō)明句表>}|struct<標(biāo)識(shí)符>|union{<結(jié)構(gòu)說(shuō)明句表>}|union<標(biāo)識(shí)符>{<結(jié)構(gòu)說(shuō)明句表>}|union<標(biāo)識(shí)符>
<結(jié)構(gòu)說(shuō)明句表>??=<結(jié)構(gòu)說(shuō)明句>|<結(jié)構(gòu)說(shuō)明句><結(jié)構(gòu)說(shuō)明句表>
<結(jié)構(gòu)說(shuō)明句>??=<類型區(qū)分符><結(jié)構(gòu)說(shuō)明符表>;
<結(jié)構(gòu)說(shuō)明符表>??=<結(jié)構(gòu)說(shuō)明符>|<結(jié)構(gòu)說(shuō)明符>,<結(jié)構(gòu)說(shuō)明符表>
<結(jié)構(gòu)說(shuō)明符>??=<說(shuō)明符>|<說(shuō)明符>:<常量表達(dá)式>|:<常量表達(dá)式>
<初始化>??=<表達(dá)式>|={<初始化表>}|={<初始化表>,}
<初始化表>??=<表達(dá)式>|<初始化表>,<初始化表>| {<初始化表>}
<構(gòu)造類型說(shuō)明語(yǔ)句>??=<結(jié)構(gòu)聯(lián)合類型說(shuō)明語(yǔ)句>|<枚舉類型說(shuō)明語(yǔ)句>
<結(jié)構(gòu)聯(lián)合類型說(shuō)明語(yǔ)句>??=<結(jié)構(gòu)聯(lián)合保留字><結(jié)構(gòu)聯(lián)合類型句>{<結(jié)構(gòu)聯(lián)合成員說(shuō)明語(yǔ)句表>}<結(jié)構(gòu)聯(lián)合對(duì)象表>
<枚舉區(qū)分符>??= enum<類型名>{常量名表}; | enum{常量名表}; | enum<類型名>;
<常量名表>??=<常量名>|<常量名>=<初始化表>|<常量名>,<常量名表>|<常量名>=<初始化表>,<常量名表>
<類型名>??=<標(biāo)識(shí)符>
<復(fù)合語(yǔ)句>??={[<執(zhí)行句表>][<執(zhí)行語(yǔ)句表>]}
<類型說(shuō)明句表>??=<類型說(shuō)明句>|<類型說(shuō)明句><類型說(shuō)明句表>
<執(zhí)行句表>??=<執(zhí)行句>|<執(zhí)行句><執(zhí)行句表>
<執(zhí)行句>??=<復(fù)合句>|<表達(dá)式>;|if (<表達(dá)式>)<執(zhí)行句>|if(<表達(dá)式>)<執(zhí)行句>else<執(zhí)行句> |while(<表達(dá)式>)<執(zhí)行句>|do <執(zhí)行句>while(<表達(dá)式>);
|for([<表達(dá)式1>];[<表達(dá)式2>]); [<表達(dá)式3>])<執(zhí)行句>
|switch (<表達(dá)式>)<執(zhí)行句>|case <常量表達(dá)式>:<執(zhí)行句>
|default:<執(zhí)行句>|break;|continue;|return ;|return <表達(dá)式>
|goto<標(biāo)識(shí)符>;|<標(biāo)識(shí)符>:<執(zhí)行句>| ; |<調(diào)用語(yǔ)句>
4C程序語(yǔ)法知識(shí)體系
4.1程序
<程序>??=[<預(yù)處理>]<外部定義句>|[<預(yù)處理>]<外部定義句><程序>
<外部定義句>??=<函數(shù)定義句>|<數(shù)據(jù)定義句>
<函數(shù)定義句>??=[<類型區(qū)分符>]<函數(shù)說(shuō)明符><函數(shù)體>
<函數(shù)說(shuō)明符>??=<說(shuō)明符>([<參數(shù)表>])
<參數(shù)表>??=<標(biāo)識(shí)符>|<標(biāo)識(shí)符>,<參數(shù)表>| <說(shuō)明句>|<說(shuō)明句>,<參數(shù)表>
<函數(shù)體>??=<類型說(shuō)明句表><函數(shù)語(yǔ)句>|<函數(shù)語(yǔ)句>
<函數(shù)語(yǔ)句>??={[<類型說(shuō)明句表>] <執(zhí)行句表>}
<數(shù)據(jù)定義句>??=[extern][<類型區(qū)分符>][<初始化說(shuō)明符表>];|[static]<類型區(qū)分符>[<初始化說(shuō)明符表>];
4.2預(yù)處理
#define<標(biāo)識(shí)符><詞串>
<詞串>??=<詞><詞串>
#define<標(biāo)識(shí)符>(<標(biāo)識(shí)符>,……,<標(biāo)識(shí)符>)<詞串>
#undef<標(biāo)識(shí)符>
#include<<文件名>>
#include“<文件名>”
#if <常量表達(dá)式>
#ifdef<標(biāo)識(shí)符>
#ifndef<標(biāo)識(shí)符>
#else
#endif
#line<常量><標(biāo)識(shí)符>
參考文獻(xiàn):
[1] 王開(kāi)鑄. 實(shí)用C語(yǔ)言程序設(shè)計(jì)[M]. 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2002.
[2] 譚浩強(qiáng). C語(yǔ)言程序設(shè)計(jì)[M]. 3版. 北京:清華大學(xué)出版社,2005.
[3] 郭俊鳳,朱景福. C程序設(shè)計(jì)案例教程[M]. 北京:清華大學(xué)出版社.2009.
Summary of System Structure of Grammatical Knowledge in C Language Programming
GUO Jun-feng, WANG Kai-zhu
(Heilongjiang East College, Harbin 150086, China)
Abstract: This paper analyses and generalizes system structure of knowledge on C language programming design deeply,and puts forward a system structure on grammatical knowledge of C language programming design. At first,we discuss on every definition of conceptions in system structure of knowledge; Then, we give the system of grammatical knowledge on C language and on programming design respectively. It also provides theoretical basis for designing exam database of C language programming design.
Key words: system structure of knowledge; C language programming design; C language grammar; C programming grammar