摘 要:為了使C語言中的switch語句被計(jì)算機(jī)理解,首先要對(duì)其建立文法并對(duì)其進(jìn)行文法改寫。針對(duì)switch語句,提出一種文法改寫方法。該方法采用自底向上的語法制導(dǎo)翻譯方法,根據(jù)switch語句代碼結(jié)構(gòu)的特點(diǎn),利用拆分法,使得改寫前后的文法完全等價(jià),只要給出語義動(dòng)作,就能實(shí)現(xiàn)switch語句的翻譯。這種方法不會(huì)對(duì)原文法的語法分析帶來影響,而且使得分析程序在棧中存取語義信息更方便。
關(guān)鍵詞:C語言;switch語句;文法改寫;語法分析
Grammar Adapt Method for Language C switch entence
ZANG Jing,UN Jinguang
(College of Electronic and Information Engineering,Liaoning echnical University,uludao,1210,China)
Abstract: In order to make switch sentence to be understood by computer,first of all is to set up its grammar and adapt itIt puts forward a kind of grammar adapt method for switch sentencehis method adopts bottom-up syntax-directed translation method,according to switch sentence code structure′s feature,using taking apart method and make the adapted grammar be equal to the unadapted,it can realize switch sentence′s translation if only giving the semantic actionhis method will not bring influence to the original grammar′s syntax analysis,and make it more convenient for analytic program to access semantic information in stack
Keywords:language C;switch sentence;grammar adapt;grammer analysis
1 switch語句
C語言提供的條件語句是實(shí)現(xiàn)程序二叉分支的常見結(jié)構(gòu),但if語句只有兩個(gè)分支可供選擇,而實(shí)際問題中常常需要用到多分支的選擇。當(dāng)然,這些都可以用嵌套的if語句來處理,但如果分支較多,則嵌套的if語句層數(shù)多、程序冗長(zhǎng)而且可讀性降低。因此,有些程序設(shè)計(jì)語言提供了實(shí)現(xiàn)多分支的語句結(jié)構(gòu),C語言中的switch語句就是這類結(jié)構(gòu)的典型。switch語句是多分支選擇語句,用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu),它的一般形式如下:
其中,E是表達(dá)式;Ci是常量表達(dá)式(1≤i≤n);i是語句(1≤i≤n+1)。當(dāng)表達(dá)式的值與某一個(gè)case后的常量表達(dá)式Ci的值相等時(shí),就執(zhí)行此case后面的語句i,若所有case中的常量表達(dá)式的值都沒有與表達(dá)式E的值匹配,就執(zhí)行default后面的語句n+1。
2 文法需要改寫?yīng)?/p>
由于計(jì)算機(jī)硬件只懂得自己的指令系統(tǒng),即只能直接執(zhí)行相應(yīng)機(jī)器語言格式的代碼程序,而不能直接執(zhí)行用高級(jí)語言編寫的程序。因此,要在計(jì)算機(jī)上實(shí)現(xiàn)除機(jī)器語言之外的任意程序設(shè)計(jì)語言,就必須先使此種語言為計(jì)算機(jī)所理解,也就是必須經(jīng)過等價(jià)變換,使它成為計(jì)算機(jī)能理解與執(zhí)行的機(jī)器語言的程序,而這種等價(jià)變換的工作由翻譯程序來完成。編譯程序是從高級(jí)語言到匯編語言或機(jī)器語言的翻譯程序,C語言使用的就是編譯程序。當(dāng)編譯程序在進(jìn)行翻譯時(shí),可以采用自底向上的語法制導(dǎo)翻譯方法,也可以采用自頂向下的語法制導(dǎo)翻譯方法。
自頂向下語法制導(dǎo)翻譯可根據(jù)需要在產(chǎn)生式右部的任何位置上調(diào)用語義動(dòng)作,但在產(chǎn)生式右部符號(hào)之間插入語義動(dòng)作,容易帶來混亂。一方面,它不易閱讀,另一方面,在具體的編譯系統(tǒng)中也不容易實(shí)現(xiàn)。
在常見的編譯系統(tǒng)中,往往希望將語義動(dòng)作置于產(chǎn)生式中所有符號(hào)的右側(cè),其目的是使翻譯按這樣的方式進(jìn)行:當(dāng)用某產(chǎn)生式進(jìn)行歸約時(shí),在完成語法分析動(dòng)作(歸約)之后,執(zhí)行相應(yīng)的語義動(dòng)作,即采用自底向上的語法制導(dǎo)翻譯方法。為達(dá)到此目的,需要對(duì)文法進(jìn)行改寫,以適應(yīng)這一要求。改寫的方法有2種,一種是將所有出現(xiàn)在產(chǎn)生式“中部”的動(dòng)作符號(hào)用一新的非終結(jié)符號(hào)取而代之,并為這個(gè)非終結(jié)符號(hào)定義一個(gè)ε-產(chǎn)生式,而為該ε-產(chǎn)生式所配的語義動(dòng)作即為原來插入的動(dòng)作符號(hào)。除了這種方法外,另外一種改造方法是將原產(chǎn)生式“拆分”成若干個(gè)“小”產(chǎn)生式,拆分點(diǎn)就設(shè)在每個(gè)語義動(dòng)作符的出現(xiàn)處,以保證動(dòng)作符均出現(xiàn)在最右側(cè)。
3 switch語句的文法改寫?yīng)?/p>
對(duì)于上述2種改寫文法的方法,第一種方法比較簡(jiǎn)單,且對(duì)原文法的可讀性影響不大,在需插入的動(dòng)作不多時(shí),可采用此法。但對(duì)于語法分析程序來說,若使用此法過多,就會(huì)帶來問題,就是由于大量ε-產(chǎn)生式的引入,可能會(huì)產(chǎn)生許多新的移進(jìn)-歸約或歸約-歸約沖突,使語法分析無法進(jìn)行。因此,編譯系統(tǒng)更常采用的方法是拆分法。基于上述原因,對(duì)switch語句的改寫將采用拆分法。上面的switch語句對(duì)應(yīng)的文法的產(chǎn)生式只有一個(gè),產(chǎn)生式右部就是它自身,左部可定義為M。在對(duì)switch語句進(jìn)行翻譯時(shí),要完成如下功能:
(1) 計(jì)算選擇表達(dá)式E的值;
為了實(shí)現(xiàn)上述目標(biāo),經(jīng)過拆分后的switch語句如下所示:
上面給出的6個(gè)產(chǎn)生式就是switch語句經(jīng)過改造后形成的產(chǎn)生式集。
可以驗(yàn)證,經(jīng)過改寫后的文法與switch語句未改寫前的文法完全等價(jià)。若不使用第3個(gè)產(chǎn)生式(即W→I case C:),則只含有一個(gè)常量表達(dá)式;若使用1次第3個(gè)產(chǎn)生式,則含有2個(gè)常量表達(dá)式,即,使用i(i≥0)次第3個(gè)產(chǎn)生式,則switch語句含有i+1個(gè)常量表達(dá)式。改寫后的文法是一個(gè)實(shí)用的方法,只要配上相應(yīng)的語義動(dòng)作就可以進(jìn)行翻譯。實(shí)際工作經(jīng)驗(yàn)證明,這種文法改寫方法不會(huì)對(duì)原文法的語法分析帶來影響,且由于產(chǎn)生式相對(duì)“短”些,分析程序在棧中存取語義信息會(huì)更方便。
4 結(jié) 語
總的說來,在對(duì)于一個(gè)語句進(jìn)行翻譯時(shí),基本策略是先研究各種語句的代碼結(jié)構(gòu),然后根據(jù)代碼結(jié)構(gòu)的特點(diǎn)和只有在歸約時(shí)才調(diào)用語義動(dòng)作這一關(guān)系,對(duì)原文法進(jìn)行適當(dāng)?shù)母脑欤沟迷诜g時(shí)能及時(shí)調(diào)用相應(yīng)的語義子程序,執(zhí)行某些重要的語義動(dòng)作。
參 考 文 獻(xiàn)
[1]譚浩強(qiáng).C程序設(shè)計(jì)[M].2版.北京:清華大學(xué)出版社,200
[2]肖軍模.程序設(shè)計(jì)語言編譯方法[M].大連:大連理工大學(xué)出版社,2000
[3]劉峰1~2R濾波器直接Ⅱ型的C語言優(yōu)化實(shí)現(xiàn)[J]現(xiàn)代電子技術(shù),2007,30(4):9-10,13
作者簡(jiǎn)介 張晶 女,197年出生,講師,工學(xué)碩士。