




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 河海大學(xué)編譯原理課程設(shè)計(jì)學(xué)生姓名: 學(xué) 號(hào): 班 級(jí): 專(zhuān) 業(yè): -指導(dǎo)教師: 編譯原理課程設(shè)計(jì)指導(dǎo)書(shū)題目一 基于語(yǔ)法制導(dǎo)翻譯的表達(dá)式轉(zhuǎn)換編譯器一、設(shè)計(jì)目的通過(guò)本課程設(shè)計(jì)獲得對(duì)實(shí)際編譯器的構(gòu)造原理、過(guò)程和方法的感性認(rèn)識(shí),全面掌握語(yǔ)法制導(dǎo)翻譯技術(shù)。二、設(shè)計(jì)內(nèi)容采用語(yǔ)法制導(dǎo)翻譯模式設(shè)計(jì)一個(gè)包含詞法分析、語(yǔ)法分析、符號(hào)表管理、錯(cuò)誤處理及輸出等功能模塊的、由中綴表達(dá)式到后綴表達(dá)式的完整編譯器。該翻譯器的規(guī)格說(shuō)明如下:start list eoflist expr;list |expr expr + term print(+) | expr term print(-) | termterm term
2、* factor print(*) | term / factor print(/) | term div factor print(DIV) | term mod factor print(MOD) factor ( expr )| id print( ) | num print( num.value ) 三、設(shè)計(jì)要求1、使用模塊化設(shè)計(jì)思想來(lái)設(shè)計(jì)該編譯器;2、詞法分析模塊用于讀入輸入串,并將其轉(zhuǎn)換成供語(yǔ)法分析模塊使用的記號(hào)流。其中包括濾掉空格和注釋、識(shí)別常數(shù)、識(shí)別標(biāo)識(shí)符和關(guān)鍵字等功能;3、要求在語(yǔ)法分析模塊中利用語(yǔ)法制導(dǎo)翻譯技術(shù)完成具體的中綴表達(dá)式到后綴表達(dá)式的翻譯,其中包括
3、按前述翻譯器的規(guī)格說(shuō)明構(gòu)建對(duì)應(yīng)表達(dá)式、項(xiàng)、因子的非終結(jié)符expr、term和factor的函數(shù)以及檢查記號(hào)是否匹配的函數(shù);并在不匹配時(shí)調(diào)用錯(cuò)誤處理模塊;4、要求符號(hào)表管理模塊主要完成符號(hào)表對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的具體實(shí)現(xiàn)功能;5、錯(cuò)誤處理模塊負(fù)責(zé)報(bào)告錯(cuò)誤信息及位置,并終止分析過(guò)程;6、輸出模塊完成翻譯后所得到的后綴表達(dá)式的輸出。四、運(yùn)行結(jié)果1、從鍵盤(pán)輸入任意中綴表達(dá)式,如: 4 - 5 * 6 DIV 4 + 8 MOD 2輸出相應(yīng)的后綴表達(dá)式: 456*4DIV-82MOD+1、 若鍵盤(pán)輸入串為非中綴表達(dá)式時(shí),如: 4 !+* 5 - 6 DIV 4 + 8 MOD 2輸出相應(yīng)語(yǔ)法錯(cuò)誤報(bào)告信息,并停止
4、語(yǔ)法分析,如: line 1 : compiler error !五、提示1、將各功能模塊設(shè)計(jì)為獨(dú)立的源程序文件;2、建立一個(gè)全局頭文件,將本設(shè)計(jì)所需要用到的系統(tǒng)頭文件的打開(kāi)、一些必要的宏定義和全局變量的聲明信息放在該全局頭文件中;3、將本設(shè)計(jì)所有文件加入一個(gè)工程文件。六、分析與討論1、如何修改錯(cuò)誤處理模塊,使得編譯器在發(fā)現(xiàn)錯(cuò)誤后能跳過(guò)出錯(cuò)語(yǔ)句,繼續(xù)進(jìn)行語(yǔ)法分析;2、試使用手工構(gòu)造和自動(dòng)生成相結(jié)合的方法來(lái)完成本課程設(shè)計(jì);3、仔細(xì)研讀附錄C有關(guān)“PL/0語(yǔ)言詞法分析器的手工構(gòu)造和自動(dòng)生成”的設(shè)計(jì)內(nèi)容,并通過(guò)借鑒PL/0語(yǔ)言詞法分析器的設(shè)計(jì)方法和具體實(shí)現(xiàn)技術(shù),對(duì)本課程設(shè)計(jì)的綜合設(shè)計(jì)進(jìn)行優(yōu)化。題目二
5、 說(shuō)明語(yǔ)句的詞法分析器一、設(shè)計(jì)目的了解詞法分析程序的基本構(gòu)造原理,掌握詞法分析程序的手工構(gòu)造及自動(dòng)構(gòu)造方法。二、設(shè)計(jì)內(nèi)容根據(jù)PASCAL語(yǔ)言的說(shuō)明語(yǔ)句形式,用手工及自動(dòng)方法構(gòu)造一個(gè)對(duì)說(shuō)明語(yǔ)句進(jìn)行詞法分析的程序。該程序能對(duì)從鍵盤(pán)輸入或從文件讀入的形如:“const count=10,sum=81.5,char1=f,string1=”hj”, max=169;”的常量說(shuō)明串進(jìn)行處理,分析常量說(shuō)明串中各常量名、常量類(lèi)型及常量值,并統(tǒng)計(jì)各種類(lèi)型常量個(gè)數(shù)。三、設(shè)計(jì)要求1、輸入的常量說(shuō)明串,要求最后以分號(hào)作結(jié)束標(biāo)志;2、根據(jù)輸入串或讀入的文本文件中第一個(gè)單詞是否為“const”判斷輸入串或文本文件是否為
6、常量說(shuō)明內(nèi)容;3、識(shí)別輸入串或打開(kāi)的文本文件中的常量名。常量名必須是標(biāo)識(shí)符,定義為字母開(kāi)頭,后跟若干個(gè)字母,數(shù)字或下劃線;4、根據(jù)各常量名緊跟等號(hào)“=”后面的內(nèi)容判斷常量的類(lèi)型。其中:字符型常量定義為放在單引號(hào)內(nèi)的一個(gè)字符;字符串常量定義為放在雙引號(hào)內(nèi)所有內(nèi)容;整型常量定義為帶或不帶+、- 號(hào),不以0開(kāi)頭的若干數(shù)字的組合;實(shí)型常量定義為帶或不帶+、- 號(hào),不以0開(kāi)頭的若干數(shù)字加上小數(shù)點(diǎn)再后跟若干數(shù)字的組合;5、統(tǒng)計(jì)并輸出串或文件中包含的各種類(lèi)型的常量個(gè)數(shù);6、以二元組(類(lèi)型,值)的形式輸出各常量的類(lèi)型和值;7、根據(jù)常量說(shuō)明串置于高級(jí)語(yǔ)言源程序中時(shí)可能出現(xiàn)的錯(cuò)誤情況,模仿高級(jí)語(yǔ)言編譯器對(duì)不同錯(cuò)誤
7、情況做出相應(yīng)處理。四、運(yùn)行結(jié)果1、輸入如下正確的常量說(shuō)明串:const count=10,sum=81.5,char1=f,max=169,str1=“h*54 2.4S!AAsj”, char2=,str2=“aa!+h”;輸出:count(integer,10)sum(float,81.5)char1(char, f)max(integer,169)str1(string,“h*54 2.4S!AAsj”)char2(char, )str2(string,“aa!+h”)int_num=2; char_num=2; string_num=2; float_num=1.2、輸入類(lèi)似如下的保留
8、字const錯(cuò)誤的常量說(shuō)明串:Aconstt count=10,sum=81.5,char1=f;輸出類(lèi)似下面的錯(cuò)誤提示信息:It is not a constant declaration statement! Please input a string again!3、輸入類(lèi)似如下含常量名或常量值錯(cuò)誤的常量說(shuō)明串:const count=10,12sum=81.5,char1=ff,max=0016;輸出類(lèi)似下面的錯(cuò)誤提示信息:count(integer,10)12sum(Wrong! It is not a identifier!)char1(Wrong! There are more
9、than one char in .)max(Wrong! The integer cant be started with 0.)int_num=1; char_num=0; string_num=0; float_num=0.4、其他類(lèi)型的錯(cuò)誤處理情況(略)。五、提示本課程設(shè)計(jì)重點(diǎn)有三個(gè):一是作為常量名的標(biāo)識(shí)符的識(shí)別;二是如何根據(jù)“=”后出現(xiàn)的內(nèi)容來(lái)判斷常量類(lèi)型;三是對(duì)各種錯(cuò)誤的處理。難點(diǎn)是對(duì)整型和實(shí)型常量的判斷必須綜合考慮多種可能情況。提示:1、 用指針或數(shù)組與指針相結(jié)合來(lái)處理輸入的常量說(shuō)明串;2、 對(duì)整型和實(shí)型常量處理時(shí),重點(diǎn)考慮常數(shù)中0的位置。六、分析與討論1、若考慮用E或e的科學(xué)計(jì)
10、數(shù)法來(lái)表示整數(shù)和實(shí)數(shù),應(yīng)該如何實(shí)現(xiàn)?2、若考慮布爾型常量,且規(guī)定其值只能為true或false,應(yīng)該如何實(shí)現(xiàn)?3、如何對(duì)手工構(gòu)造的詞法分析程序做進(jìn)一步的優(yōu)化,以提高代碼質(zhì)量和運(yùn)行效率?題目三 基于預(yù)測(cè)分析方法的表達(dá)式語(yǔ)法分析器一、設(shè)計(jì)目的了解預(yù)測(cè)分析器的基本構(gòu)成及用自頂向下的預(yù)測(cè)法對(duì)表達(dá)式進(jìn)行語(yǔ)法分析的方法,掌握預(yù)測(cè)語(yǔ)法分析程序的手工構(gòu)造方法。二、設(shè)計(jì)內(nèi)容已知文法GS:S-ATA-BUT-+AT|$U-*BU|$B-(S)|m其中,$表示空串。對(duì)該文法構(gòu)造預(yù)測(cè)分析表,并手工構(gòu)造預(yù)測(cè)分析程序,對(duì)輸入串m+m*m#進(jìn)行語(yǔ)法分析,并根據(jù)棧的變化狀態(tài)輸出分析過(guò)程。三、設(shè)計(jì)要求:1、判斷上述文法GS是否
11、LL(1)文法,若不是,將其轉(zhuǎn)變?yōu)長(zhǎng)L(1)文法;2、對(duì)轉(zhuǎn)變后的LL(1)文法建立預(yù)測(cè)分析表;3、根據(jù)清華大學(xué)出版、呂映之等編著的編譯原理教材教材第五章Page 88的圖5.11手工構(gòu)造預(yù)測(cè)分析程序;4、用預(yù)測(cè)分析程序?qū)︽I盤(pán)輸入串m+m*m#進(jìn)行語(yǔ)法分析,并根據(jù)棧的變化狀態(tài)輸出給定串的具體分析過(guò)程。四、運(yùn)行結(jié)果從鍵盤(pán)輸入串:m+m*m#;輸出:用預(yù)測(cè)分析法分析符號(hào)串m+m*m#的過(guò)程StepStackStringRuleStepStackStringRule1#Sm+m*m#S-AT10#TUmm*m#M匹配2#TAm+m*m#A-BU11#TU*m#U-*BU3#TUBm+m*m#B-m12
12、#TUB*m#*匹配4#TUmm+m*m#M匹配13#TUBm#B-m5#TU+m*m#U-$14#TUmm#M匹配6#T+m*m#T-+AT15#TU#U-$7#TA+m*m#+匹配16#T#T-$8#TAm*m#A-BU17#接受9#TUBm*m#B-m五、提示本課程設(shè)計(jì)重點(diǎn)有兩個(gè):一是如何用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)預(yù)測(cè)分析表存儲(chǔ)和使用;二是如何實(shí)現(xiàn)各規(guī)則右部串的逆序入棧處理。建議:使用結(jié)構(gòu)體數(shù)組。六、分析與討論1、若輸入串不是指定文法的句子,會(huì)出現(xiàn)什么情況?2、總結(jié)預(yù)測(cè)語(yǔ)法分析程序的設(shè)計(jì)和實(shí)現(xiàn)的一般方法。題目四 基于算符優(yōu)先分析方法的表達(dá)式語(yǔ)法分析器一、設(shè)計(jì)目的了解用算符優(yōu)先法對(duì)表達(dá)進(jìn)行語(yǔ)法分
13、析的方法,掌握自頂向下的預(yù)測(cè)語(yǔ)法分析程序的手工構(gòu)造方法。二、設(shè)計(jì)內(nèi)容對(duì)簡(jiǎn)單表達(dá)式文法構(gòu)造算符優(yōu)先分析器。三、設(shè)計(jì)要求1、對(duì)下列簡(jiǎn)單表達(dá)式文法G E構(gòu)造算符優(yōu)先關(guān)系表。E # E #E E + T | TT T * F | FF P / F PP ( E )i2、根據(jù)算符優(yōu)先關(guān)系表,使用棧結(jié)構(gòu)來(lái)實(shí)現(xiàn)算符優(yōu)先分析:設(shè)置兩個(gè)棧:存放運(yùn)算符的OPTR棧和存放操作數(shù)或運(yùn)算結(jié)果的OPND棧。具體算法描述如下:(1)首先置操作數(shù)OPND棧為空棧,將#入運(yùn)算符OPTR棧。(2)依次讀入表達(dá)式中每個(gè)單詞,若是操作數(shù)則進(jìn)OPND棧,若是運(yùn)算符則轉(zhuǎn)(3)。(3)當(dāng)前設(shè)讀入的運(yùn)算符為2,查找算符優(yōu)先關(guān)系表,比較2與O
14、PTR棧頂元素1 :若1-*/(=i#=2、 參考嚴(yán)蔚敏等編著、清華大學(xué)出版社出版的C語(yǔ)言版數(shù)據(jù)結(jié)構(gòu)P52-P54的表達(dá)式求值算法。題目五遞歸下降分析法一、設(shè)計(jì)目的掌握遞歸下降分析法的基本原理,掌握預(yù)測(cè)符集的求法, 掌握遞歸下降分析程序的構(gòu)造方法。二、設(shè)計(jì)內(nèi)容假設(shè)文法中有如下的產(chǎn)生式Ab1 | b2 | | bn,則應(yīng)按如下方法編寫(xiě)語(yǔ)法分析子程序procedure A() beginif tokenPredict(Ab1) then (b1) else if tokenPredict(Ab2) then (b2) else if tokenPredict(Abn) then (bn) else
15、 error() end其中對(duì)bi =X1X2Xn,(bi) =(X1); (X2); (Xn);l 如果XiVN,(Xi)= Xil 如果XiVT,(Xi)= Match(Xi) l 如果Xi= e, () = skip(空語(yǔ)句)三、設(shè)計(jì)要求:理解遞歸下降語(yǔ)法分析方法的主要原理,理解遞歸下降分析法對(duì)文法的要求, 熟練掌握Predict集合的求法, 熟練掌握文法變換算法(消除左遞歸和消除公共前綴)。四、提示:1. 基本原理遞歸下降法是語(yǔ)法分析中最易懂的一種方法。它的主要原理是,對(duì)每個(gè)非終極符按其產(chǎn)生式結(jié)構(gòu)構(gòu)造相應(yīng)語(yǔ)法分析子程序,其中終極符產(chǎn)生匹配命令,而非終極符則產(chǎn)生過(guò)程調(diào)用命令。因?yàn)槲姆ㄟf歸
16、相應(yīng)子程序也遞歸,所以稱(chēng)這種方法為遞歸子程序下降法或遞歸下降法。其中子程序的結(jié)構(gòu)與產(chǎn)生式結(jié)構(gòu)幾乎是一致的。2. 文法要求遞歸下降法要滿足的條件:假設(shè)A的全部產(chǎn)生式為A1|2|n ,則必須滿足如下條件才能保證可以唯一的選擇合適的產(chǎn)生式predict(Ai)predict(Aj)=,當(dāng)ij.五、實(shí)驗(yàn)步驟1求SNL文法中每個(gè)產(chǎn)生式Predict集合Predict(A)= First() , 當(dāng)eFirst()= (First()- e) Follow(A),當(dāng)eFirst()根據(jù)Predict集合的定義求SNL的文法中每個(gè)產(chǎn)生式的Predict集合,判斷是否滿足遞歸下降法分析條件,若不滿足用消除左遞
17、歸和消除公共前綴等文法等價(jià)變化算法對(duì)文法進(jìn)行變換,使其滿足遞歸下降法的要求。2. 構(gòu)造遞歸下降語(yǔ)法分析程序采用了遞歸子程序方法進(jìn)行語(yǔ)法分析,對(duì)文法中的每個(gè)非終極符號(hào)按其產(chǎn)生式結(jié)構(gòu)產(chǎn)生相應(yīng)的語(yǔ)法分析子程序,完成相應(yīng)的識(shí)別任務(wù)。其中終結(jié)符產(chǎn)生匹配命令,非終結(jié)符則產(chǎn)生調(diào)用命令。每次進(jìn)入子程序之前都預(yù)先讀入一個(gè)單詞。因?yàn)槭褂昧诉f歸下降方法,所以程序結(jié)構(gòu)和層次清晰明了,易于手工實(shí)現(xiàn),且時(shí)空效率較高。實(shí)際的語(yǔ)法分析工作,從調(diào)用總程序的分析子程序開(kāi)始,根據(jù)產(chǎn)生式進(jìn)行遞歸調(diào)用各個(gè)分析子程序。附錄A 部分課程設(shè)計(jì)題目參考源程序A.1 基于語(yǔ)法制導(dǎo)翻譯的表達(dá)式轉(zhuǎn)換編譯器參考源程序/*全局頭文件myglobal.h
18、,用于存放需加載的頭文件、宏定義、全局變量*/#include #include #include /* 加載字符測(cè)試函數(shù)*/#define BUFSIZE 128 /* 定義緩沖區(qū)大小*/#define NONE -1#define EOSTR 0#define NUM 256#define DIV 257#define MOD 258#define ID 259#define DONE 260int tokenval; /* 定義單詞屬性值*/int lineno;struct table /* 定義符號(hào)表結(jié)構(gòu)*/ char *lexptr; int token;struct table
19、symtable;/* 定義符號(hào)表*/*詞法分析程序lex.c*/#include “global.h”char lexbufBUFSIZE;int lineno=1;int tokenval=NONE;int lex() /*詞法分析函數(shù)*/ int t;while(1)t=getchar();if (t=| t=t) ; /*濾掉空格*/else if (t=n) lineno+;else if (isdigit(t) ungetc(t,stdin); scanf(“%d”,&tokenval); return NUM;else if (isalpha(t) int p,b=0; whil
20、e(isalnum(t) lexbufb=t;t=getchar();b=b+1;if (bBUFSIZE) error(“compiler error!”); lexbufb=EOSTR;if (t!=EOF) ungetc(t,stdin);p=lookup(lexbuf);if (p=0) p=insert(lexbuf,ID); tokenval=p;return sysmtablep.token; else if (t=EOF)return DONE; else tokenval=NONE;return t; /*語(yǔ)法分析程序paserx.c*/#include “global.h”
21、int lookahead;void parse() lookahead=lex(); while (lookahead!=DONE) express();match(;);void express() int t; void term(); while (1) switch(lookahead) case +: case -:t= lookahead;match(lookahead); term(); emit(t,NONE); continue;default: return; void term()int t; void factor(); while (1) switch(lookah
22、ead) case *: case /: case DIV: case MOD:t= lookahead;match(lookahead); factor(); emit(t,NONE); continue;default: return; void factor() switch(lookahead) case (:match();express();match();break; case NUM:emit(NUM,tokenval);match(NUM);break;case ID:emit(ID,tokenval);match(ID);break;default: error(“synt
23、ax error”); void match(int t) if (lookahead=t) lookahead=lex();else error(“syntax error”);/*輸出程序emitter.c*/#include “global.h”voidemit(int t,int tval) switch(t) case +: case -: case *: case /:printf(“%cn”,t);break;case DIV:printf(“DIVn”);break;case MOD:printf(“MODn”);break; case NUM:printf(“%dn”,tva
24、l);break; case ID:printf(“%sn”,symtabletval.lexptr);break;default:printf(“token %d, tokenval %dn”,t,tval);/*符號(hào)表處理程序symbol.c*/#include “global.h”#define STRMAX 999#define SYMMAX 100char lexemesSTRMAX;int lasrchar=-1;struct entry symtableSYMMAX;int lastentry=0;int lookup(char *s) int p; for (p=lastent
25、ry;p0;p-) if (strcmp(symtablep.lexptr,s)=0) return p; return 0;int insert(char *s,int tok) int len; len=strlen(s); if (lastentry+1=SYMMAX) error(“symbol table full”); if (lastchar+len+1=STRMAX) error(“l(fā)exemes array full”);lastentry=lastentry+1;symtablelastentry.token=tok;symtablelastentry.lexptr=&le
26、xemeslastchar+1;lastchar=lastchar+len+1;strcpy(symtablelastentry.lexptr,s);return lastentry;/*在符號(hào)表中填入關(guān)鍵字程序init.c*/#include “global.h”struct entry keywords=“div”,DIV,“mod”,MOD,0,0void init() struct entry *p; for (p=keywords;p-token;p+) insert(p-lexptr,p-token);/*錯(cuò)誤處理程序error.c*/#include “global.h”void
27、 error( char *m) fprintd(stderr,“l(fā)ine %d: %sn”,lineno,m); exit(1); /*主程序mian.c*/#include “global.h”main() init();parse();exit(0);A.2 說(shuō)明語(yǔ)句的詞法分析器參考源程序一、說(shuō)明1、本例中字符和字符串都用“”來(lái)識(shí)別,引號(hào)中只包含一個(gè)字符時(shí)為字符型常量,否則,為字符串常量;2、本例只起示范性作用,并沒(méi)有全面考慮高級(jí)語(yǔ)言編譯器對(duì)常量說(shuō)明串中可能出現(xiàn)錯(cuò)誤的處理方法。2、 實(shí)際構(gòu)造本課程設(shè)計(jì)的常量說(shuō)明串的詞法分析程序時(shí),建議進(jìn)行模塊化處理。二、源代碼#includestdio.
28、h#includectype.h#define N 80#define M 16main()char *p0,*t0,*p1,*t1, *p2,*t2,*p3,*t3=const;/*char *t=true,*f=false;*/int ci=0,cf=0,cc=0,cs=0,cb=0;printf(nInput string: );p0=(char *)malloc(N*sizeof(char);p1=(char *)malloc(M*sizeof(char);p2=(char *)malloc(M*sizeof(char);p3=(char *)malloc(M*sizeof(char)
29、;t0=p3;t1=p1;t2=p2;gets(p0);while(*p0!= ) /* 檢查輸入串是否以“const”開(kāi)頭 */if (*p0=*t3) p0+; t3+; else printf(nThis string isnt a const declaration!); exit(0); while (*p0!=!) /* 開(kāi)始處理輸入串 p0 */ while (p1t1+M) *p1=0; p1+; p1=t1; while (p2t2+M) *p2=0; p2+; p2=t2;if (*(p0-1)= |*(p0-1)=;) /*從串p0中取標(biāo)識(shí)符,并將其作為常量名存放到串p1
30、中 */ if (*p0!=_&(!isalpha(*p0) printf(n Const name is wrong . Exit !); break; else if (*p0=_|isalpha(*p0) do *p1=*p0; p0+; p1+; if (*p0!=&*p0!=_&!isalnum(*p0) printf(n Const name is wrong . Exit !); break; while(*p0!=); p1=t1; printf(n Name:%s;t,p1); else if (*(p0-1)=) /* 從串p0中取常量值存放到串p2中 */ if (!is
31、digit(*p0)&*p0!=&*p0!=.) printf(n Const data is wrong . Exit !); break; else if (*p0=) /* 處理字符和字符串常量 */ do *p2=*p0; p0+; p2+; while(*p0!=;); if (*(p0-1)!=) printf(n String data is wrong. Exit !); break; p2=t2; if (strlen(p2)=3) cc+; printf( Data:%s ;t Type:char !n,p2); else cs+; printf( Data:%s ;t T
32、ype:string !n,p2); if (*p0=.) /* 處理由點(diǎn)號(hào)開(kāi)頭的實(shí)數(shù) */ if (*(p0+1)=;) printf(n Float data is wrong. Exit !); break; else if (isdigit(*(p0+1) do *p2=*p0; p0+; p2+; if (!isdigit(*p0)&*p0!=;) printf(n Float data is wrong. Exit !); break; while(*p0!=;); p2=t2; cf+; printf( Data:%s ;t Type: float !n,p2); if (*p0
33、=0) /* 處理整數(shù)0或由0作整數(shù)部分的實(shí)型常量 */ *p2=*p0; p0+; p2+; if (*p0=;) ci+;printf( Data:%c ;t Type:int !n,*(p2-1); else if (*p0=.) do *p2=*p0; p0+; p2+; if (!isdigit(*p0)&*p0!=;) printf(n Float data is wrong. Exit !); break; while(*p0!=;); p2=t2; cf+; printf( Data:%s ;t Type:float !n,p2); if (isdigit(*p0)&(*p0!
34、=0) /* 處理其它整型常量和實(shí)型常量*/ p3=t0;p3=int;ci+;do *p2=*p0; p0+; p2+; if (!isdigit(*p0)&*p0!=;&*p0!=.) printf(n Int data is wrong. Exit !); break; else if (*p0=.)p3=t0;p3=float;ci-;cf+; while(*p0!=;); p2=t2; printf( Data:%s ;t Type:%s !n,p2,p3); /* 存放常量值的p2處理完 */ else p0+; /* 輸入串p0處理完 */ printf( n Total:n tint numbers: %dn tfloat numbers: %d,ci,cf); printf( n tstring n
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強(qiáng)城市公共設(shè)施安全管理計(jì)劃
- 2025年智能馬桶蓋合作協(xié)議書(shū)
- 2025年高模量玻璃纖維紗項(xiàng)目發(fā)展計(jì)劃
- 移動(dòng)支付系統(tǒng)研發(fā)合作協(xié)議
- 從寓言故事看中華傳統(tǒng)美德的傳承與教育
- 公司信息化安全規(guī)章制度及操作手冊(cè)
- racemic-Nornicotine-Standard-生命科學(xué)試劑-MCE
- 班主任與學(xué)生家長(zhǎng)安全協(xié)議書(shū)
- Cholesterol-n-Octanoate-Standard-生命科學(xué)試劑-MCE
- 5-Bromo-6-chloropyrazin-2-amine-生命科學(xué)試劑-MCE
- 生物-遼寧省大連市2024-2025學(xué)年高三上學(xué)期期末雙基測(cè)試卷及答案
- Unit 4 A glimpse of the future 說(shuō)課稿-2023-2024學(xué)年高二下學(xué)期英語(yǔ)外研版(2019)選擇性必修第三冊(cè)001
- 鄉(xiāng)村建設(shè)規(guī)劃許可培訓(xùn)
- 加氣站安全課件
- 《民營(yíng)企業(yè)清廉建設(shè)評(píng)價(jià)規(guī)范》
- 智能RPA財(cái)務(wù)機(jī)器人開(kāi)發(fā)教程-基于來(lái)也UiBot 課件 第2章-常用機(jī)器人流程自動(dòng)化
- GB/T 45037-2024糧油機(jī)械扒谷機(jī)
- 團(tuán)聚體與土壤有機(jī)質(zhì)轉(zhuǎn)化-洞察分析
- 公務(wù)車(chē)輛定點(diǎn)加油服務(wù)投標(biāo)文件(技術(shù)方案)
- 膝關(guān)節(jié)鏡手術(shù)后康復(fù)
- 安徽工程大學(xué)《回歸分析》2023-2024學(xué)年第一學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論