2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  編譯原理課程設(shè)計(jì)</b></p><p>  題 目 C語言編譯器實(shí)現(xiàn)</p><p>  計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)10 級(jí) 計(jì)本 班</p><p>  學(xué) 號(hào): </p><p>  姓 名: </p>

2、<p>  指導(dǎo)教師: </p><p>  完成時(shí)間: 2013 年 6 月 </p><p><b>  目 錄</b></p><p><b>  一、 原理1</b></p><p><b>  1、簡(jiǎn)介1</b>

3、</p><p>  2、單詞符號(hào)及種別表示1</p><p>  3、語法結(jié)構(gòu)定義如下:2</p><p><b>  二、運(yùn)行環(huán)境3</b></p><p>  三、 算法設(shè)計(jì)思想3</p><p>  1、詞法分析主要算法3</p><p>  2、語法分析

4、主要算法3</p><p>  3、語義分析主要算法4</p><p>  四、 程序流程圖5</p><p>  五、運(yùn)行測(cè)試結(jié)果8</p><p><b>  六、心得體會(huì)9</b></p><p><b>  七、源代碼9</b></p>&l

5、t;p><b>  C語言編譯器實(shí)現(xiàn)</b></p><p><b>  一、 原理</b></p><p><b>  1、簡(jiǎn)介</b></p><p>  編譯程序的工作過程一般可以分為五個(gè)階段:詞法分析、語法分析、語義分析與中間代碼產(chǎn)生、優(yōu)化、目標(biāo)代碼生成。每一個(gè)階段在功能上是相對(duì)獨(dú)立的,

6、它一方面從上一個(gè)階段獲取分析的結(jié)果來進(jìn)行分析,另一方面由將結(jié)果傳遞給下一個(gè)階段。由編譯程序的五個(gè)階段就對(duì)應(yīng)了編譯系統(tǒng)的結(jié)構(gòu)。</p><p>  2、單詞符號(hào)及種別表示</p><p>  3、語法結(jié)構(gòu)定義如下:</p><p>  <程序> ::= main()<語句塊> </p><p>  <語句塊>

7、 ::= ‘{‘<語句串>’}’ </p><p>  <語句串>::=<語句>{;<語句>};</p><p>  <語句>::=<賦值語句>|<條件語句>|<循環(huán)語句></p><p>  <賦值語句>::=ID=<表達(dá)式> </p&g

8、t;<p>  <條件語句>::=if<條件><語句塊> </p><p>  <循環(huán)語句>::=do <語句塊>while <條件></p><p>  <條件>::=<表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式> </p><p>  

9、<表達(dá)式> ::= <項(xiàng)>{ +<項(xiàng)>|-<項(xiàng)>}</p><p>  <項(xiàng)> ::= <因子>{*<因子>|/<因子>}</p><p>  <因子> ::=ID|num|(<表達(dá)式>)</p><p>  <關(guān)系運(yùn)算符> ::= &

10、lt;|<=|>|>=|==|!</p><p><b>  二、運(yùn)行環(huán)境</b></p><p>  Windows 系統(tǒng) Visual C++ 6.0</p><p><b>  三、 算法設(shè)計(jì)思想</b></p><p>  1、詞法分析主要算法</p><

11、;p>  這部分對(duì)源文件進(jìn)行分析,允許/* */注釋。從源文件依次讀取字符,對(duì)字符進(jìn)行分析,組成字符串、數(shù)字、關(guān)系符等固定含義的token符,并把它們添加到token鏈中,如果遇到非法字符報(bào)錯(cuò)并退出程序。</p><p>  2、語法分析主要算法</p><p>  這部分對(duì)Token鏈進(jìn)行分析,利用自底向上的分析方法,構(gòu)建SLR(1)分析表的過程是手工完成的。語法分析的同時(shí)構(gòu)

12、建語法樹,移進(jìn)時(shí)創(chuàng)建葉子,規(guī)約時(shí)創(chuàng)建節(jié)點(diǎn)。</p><p>  3、語義分析主要算法</p><p>  這部分對(duì)語法樹從左到右進(jìn)行遍歷,節(jié)點(diǎn)記錄了規(guī)約式的編號(hào),遍歷到節(jié)點(diǎn)時(shí)就進(jìn)行相應(yīng)處理。語義分析主要檢查變量、函數(shù)是否被定義或重定義,同時(shí)產(chǎn)生四元式。</p><p><b>  函數(shù)一覽表</b></p><p>  

13、void scanner(); </p><p>  void lrparser(); </p><p>  void staBlock(int *nChain); </p><p>  void staString(int *nChain);</p><p>  void sta(int *nChain); </p><

14、p>  void fuzhi(); </p><p>  void tiaojian(int *nChain); </p><p>  void xunhuan(); </p><p>  char* E(); </p><p>  char* T(); </p><p>  char* F(); </p&

15、gt;<p>  char *newTemp(); </p><p>  void backpatch(int p,int t); </p><p>  int merge(int p1,int p2); </p><p>  void emit(char *res,char *num1,char *op,char *num2);</p>

16、<p><b>  四元組結(jié)構(gòu)體定義:</b></p><p><b>  struct{</b></p><p>  char result[10]; </p><p>  char arg1[10];</p><p>  char opera[10];</p><

17、p>  char arg2[10];</p><p>  }fourCom[20];</p><p><b>  四、 程序流程圖</b></p><p><b>  圖1 主函數(shù)流程圖</b></p><p><b>  否</b></p><p&g

18、t;<b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  圖

19、2 遞歸下降分析分析程序流程圖 </p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p>  圖3 語句塊分析流程圖</p><p><b>  否</b&g

20、t;</p><p><b>  是</b></p><p>  圖4 語句串分析流程圖</p><p><b>  是否</b></p><p><b>  否</b></p><p><b>  是</b></p>

21、<p><b>  否</b></p><p><b>  是</b></p><p>  圖5 語句分析流程圖</p><p><b>  五、運(yùn)行測(cè)試結(jié)果</b></p><p><b>  正確程序結(jié)果</b></p>&

22、lt;p>  錯(cuò)誤程序結(jié)果:報(bào)錯(cuò)?。?)</p><p>  錯(cuò)誤程序結(jié)果:報(bào)錯(cuò)!(2)</p><p><b>  六、心得體會(huì)</b></p><p>  這次的課程設(shè)計(jì),最大的收獲就是清楚了編譯的整個(gè)過程,在學(xué)習(xí)編譯原理這門課程之時(shí),在做設(shè)計(jì)的過程中和詞法分析、語法分析、語義分析聯(lián)系起來, 非常清晰的理解了簡(jiǎn)單編譯器實(shí)現(xiàn)過程。讀完了

23、一個(gè)完整的源程序,知道了它里面的功能??煲约敖Y(jié)構(gòu)組織,也明白了編譯的基本原理.。在實(shí)驗(yàn)中加深了在課堂上說學(xué)到編譯原理知識(shí)的理解,實(shí)驗(yàn)中實(shí)踐了書本上的知識(shí)和原理。</p><p>  通過這次課程設(shè)計(jì)也使我認(rèn)識(shí)到自己的不足。首先這些代碼我并不能獨(dú)立完成,而是在網(wǎng)上查閱了大量資料,以及在許多同學(xué)的幫助下才完成的。其次平時(shí)對(duì)編譯原理的各個(gè)部分理解的不錯(cuò),平時(shí)實(shí)驗(yàn)做的也還可以,只是在做這次的課程設(shè)計(jì)的時(shí)候需要把整個(gè)編譯的

24、過程整體的思路搞清楚。通過看以前的筆記和課本,我了解了各個(gè)階段間的連接,最終使得本次課程設(shè)計(jì)的順利完成。</p><p><b>  七、源代碼</b></p><p>  #include<stdio.h></p><p>  #include<string.h></p><p>  #incl

25、ude<math.h></p><p>  #include<stdlib.h></p><p>  char prog[80]; </p><p>  char token[8]; </p><p>  char ch; </p><p>  int syn,p,m,n,i;

26、 </p><p>  double sum; </p><p>  int count; </p><p>  int isSignal; </p><p>  int isError;</p><p>  int isDecimal; </p><p>  do

27、uble decimal; </p><p>  int isExp; </p><p>  int index; </p><p>  int isNegative; </p><p>  double temp; </p><p>  int temp2;</p><p&g

28、t;  int repeat; </p><p>  int nextq;</p><p><b>  int kk; </b></p><p>  int ntc,nfc,nnc,nnb,nna;</p><p>  char *rwtab[9]={"main","int",&q

29、uot;float","double","char","if","else","do","while"};</p><p><b>  struct{</b></p><p>  char result[10]; </p>&

30、lt;p>  char arg1[10];</p><p>  char opera[10];</p><p>  char arg2[10];</p><p>  }fourCom[20]; </p><p>  void scanner(); </p><p>  void lrparser(); </

31、p><p>  void staBlock(int *nChain); </p><p>  void staString(int *nChain);</p><p>  void sta(int *nChain); </p><p>  void fuzhi(); </p><p>  void tiaojian(int

32、 *nChain); </p><p>  void xunhuan(); </p><p>  char* E(); </p><p>  char* T(); </p><p>  char* F(); </p><p>  char *newTemp(); </p><p>  void

33、backpatch(int p,int t); </p><p>  int merge(int p1,int p2); </p><p>  void emit(char *res,char *num1,char *op,char *num2); </p><p>  void main()</p><p><b>  {<

34、/b></p><p><b>  p=0;</b></p><p><b>  count=0;</b></p><p>  isDecimal=0;</p><p><b>  index=0;</b></p><p><b>  r

35、epeat=0;</b></p><p><b>  kk=0;</b></p><p>  printf("\n請(qǐng)輸入待編譯程序:\n");</p><p><b>  do{</b></p><p>  ch=getchar();</p><p

36、>  prog[p++]=ch;</p><p>  }while(ch!='#');</p><p><b>  p=0;</b></p><p>  isError=0;</p><p>  scanner();</p><p>  lrparser();</p&g

37、t;<p>  for(i=1;i<nextq;i++) </p><p><b>  {</b></p><p>  printf("\n%d\t",i);</p><p>  printf("(%5s %5s %5s \t%5s )\n",fourCom[i].arg1,fou

38、rCom[i].opera,fourCom[i].arg2,fourCom[i].result);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void lrparser()</p><p><b>  {</b><

39、/p><p>  int nChain;</p><p>  nfc=ntc=1;</p><p><b>  nextq=1;</b></p><p>  if(syn==1) </p><p><b>  {</b></p><p>  scanner

40、();</p><p>  if(syn==26) </p><p><b>  {</b></p><p>  scanner();</p><p>  if(syn==27)</p><p><b>  {</b></p><p>  scanne

41、r();</p><p>  staBlock(&nChain);</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("缺少右括號(hào)\n");</p><p><b> 

42、 }</b></p><p><b>  else </b></p><p>  printf("缺少左括號(hào)\n");</p><p><b>  }</b></p><p><b>  else</b></p><p>

43、  printf("缺少main\n");</p><p><b>  }</b></p><p>  void staBlock(int *nChain) </p><p><b>  {</b></p><p>  if(syn==28) </p><p&

44、gt;<b>  {</b></p><p>  scanner();</p><p>  staString(nChain);</p><p>  if(syn==29) </p><p>  scanner(); </p><p><b>  else</b></

45、p><p>  printf("缺少}號(hào)\n");</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("缺少{號(hào)\n");</p><p><b>  }<

46、;/b></p><p>  void staString(int *nChain) </p><p><b>  {</b></p><p>  sta(nChain);</p><p>  backpatch(*nChain,nextq);</p><p>  while(syn==31

47、) </p><p><b>  {</b></p><p>  scanner();</p><p>  sta(nChain);</p><p><b>  }</b></p><p><b>  }</b></p><p>

48、  void sta(int *nChain) </p><p><b>  {</b></p><p>  if(syn==10)</p><p><b>  {</b></p><p><b>  fuzhi();</b></p><p><b

49、>  }</b></p><p>  else if(syn==6) </p><p><b>  {</b></p><p>  tiaojian(nChain);</p><p><b>  }</b></p><p>  else if(syn==8)

50、 </p><p>  xunhuan();</p><p><b>  }</b></p><p>  void tiaojian(int *nChain)</p><p><b>  {</b></p><p>  char res[10],num1[10],num2[1

51、0],op[10];</p><p>  int nChainTemp;</p><p>  if(syn==6) </p><p><b>  {</b></p><p>  scanner();</p><p>  if(syn==26) </p><p><b&

52、gt;  {</b></p><p>  scanner();</p><p>  strcpy(num1,E());</p><p>  if((syn<=37)&&(syn>=32)) </p><p><b>  {</b></p><p>  swi

53、tch(syn)</p><p><b>  {</b></p><p><b>  case 32:</b></p><p>  strcpy(op,">");</p><p><b>  break;</b></p><p>

54、;<b>  case 33:</b></p><p>  strcpy(op,">=");</p><p><b>  break;</b></p><p><b>  case 34:</b></p><p>  strcpy(op,"&

55、lt;");</p><p><b>  break;</b></p><p><b>  case 35:</b></p><p>  strcpy(op,"<=");</p><p><b>  break;</b></p>

56、<p><b>  case 36:</b></p><p>  strcpy(op,"==");</p><p><b>  break;</b></p><p><b>  case 37:</b></p><p>  strcpy(op,&

57、quot;!=");</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("error");</p><p><b>  }</b></p><

58、;p><b>  }</b></p><p>  scanner();</p><p>  strcpy(num2,E());</p><p>  strcat(num1,op);</p><p>  strcat(num1,num2);</p><p>  ntc=nextq; </

59、p><p>  emit("0","if",num1,"goto"); </p><p>  nfc=nextq; </p><p>  emit("0","","","goto");</p><p>  b

60、ackpatch(ntc,nextq); </p><p><b>  }</b></p><p>  if(syn==27) </p><p>  scanner();</p><p>  staBlock(&nChainTemp); </p><p>  *nChain=merge

61、(nChainTemp,nfc);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void xunhuan()</p><p><b>  {</b></p><p>  char res[10],n

62、um1[10],num2[10],op[10];</p><p>  int nChainTemp;</p><p>  if(syn==8) </p><p><b>  {</b></p><p>  nnc=nextq; </p><p>  scanner();</p>&l

63、t;p>  staBlock(&nChainTemp); </p><p>  if(syn==9) </p><p><b>  {</b></p><p>  scanner();</p><p>  if(syn==26) </p><p><b>  {</b

64、></p><p>  scanner();</p><p>  strcpy(num1,E());</p><p>  if((syn<=37)&&(syn>=32)) </p><p><b>  {</b></p><p>  switch(syn)<

65、/p><p><b>  {</b></p><p><b>  case 32:</b></p><p>  strcpy(op,">");</p><p><b>  break;</b></p><p><b>  

66、case 33:</b></p><p>  strcpy(op,">=");</p><p><b>  break;</b></p><p><b>  case 34:</b></p><p>  strcpy(op,"<");&

67、lt;/p><p><b>  break;</b></p><p><b>  case 35:</b></p><p>  strcpy(op,"<=");</p><p><b>  break;</b></p><p>&l

68、t;b>  case 36:</b></p><p>  strcpy(op,"==");</p><p><b>  break;</b></p><p><b>  case 37:</b></p><p>  strcpy(op,"!="

69、;);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("error");</p><p><b>  }</b></p><p><b&

70、gt;  }</b></p><p>  scanner();</p><p>  strcpy(num2,E());</p><p>  strcat(num1,op);</p><p>  strcat(num1,num2);</p><p>  nnb=nextq;</p><p&

71、gt;  emit("0","if",num1,"goto"); </p><p>  backpatch(nnb,nnc);</p><p>  nna=nextq;</p><p>  emit("0","","","goto&quo

72、t;);</p><p>  backpatch(nna,nextq);</p><p><b>  }</b></p><p>  if(syn==27) </p><p>  scanner();</p><p><b>  }</b></p><p

73、><b>  }</b></p><p><b>  }</b></p><p>  void fuzhi() </p><p><b>  {</b></p><p>  char res[10],num[10]; </p><p>  if(s

74、yn==10) </p><p><b>  {</b></p><p>  strcpy(res,token);</p><p>  scanner();</p><p>  if(syn==21) </p><p><b>  {</b></p><p

75、>  scanner();</p><p>  strcpy(num,E());</p><p>  emit(res,num,"=","");</p><p><b>  }</b></p><p><b>  else</b></p>

76、<p><b>  {</b></p><p>  printf("缺少=號(hào)\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

77、<p><b>  char* E()</b></p><p><b>  {</b></p><p>  char *res,*num1,*op,*num2;</p><p>  res=(char *)malloc(10);</p><p>  num1=(char *)mallo

78、c(10);</p><p>  op=(char *)malloc(10);</p><p>  num2=(char *)malloc(10);</p><p>  strcpy(num1,T());</p><p>  while((syn==22)||(syn==23)) </p><p><b>

79、  {</b></p><p>  if(syn==22)</p><p>  strcpy(op,"+");</p><p><b>  else</b></p><p>  strcpy(op,"-");</p><p>  scanner(

80、);</p><p>  strcpy(num2,T());</p><p>  strcpy(res,newTemp());</p><p>  emit(res,num1,op,num2);</p><p>  strcpy(num1,res);</p><p><b>  }</b><

81、/p><p>  return num1;</p><p><b>  }</b></p><p>  char* T() </p><p><b>  {</b></p><p>  char *res,*num1,*op,*num2;</p><p>

82、  res=(char *)malloc(10);</p><p>  num1=(char *)malloc(10);</p><p>  op=(char *)malloc(10);</p><p>  num2=(char *)malloc(10);</p><p>  strcpy(num1,F());</p><

83、p>  while((syn==24)||(syn==25)) //* /</p><p><b>  {</b></p><p>  if(syn==24) </p><p>  strcpy(op,"*");</p><p><b>  else</b></p&g

84、t;<p>  strcpy(op,"/");</p><p>  scanner();</p><p>  strcpy(num2,F());</p><p>  strcpy(res,newTemp());</p><p>  emit(res,num1,op,num2);</p><

85、p>  strcpy(num1,res);</p><p><b>  }</b></p><p>  return num1;</p><p><b>  }</b></p><p>  char* F() </p><p><b>  {</b>

86、;</p><p>  char *res;</p><p>  res=(char *)malloc(10);</p><p>  if(syn==10)</p><p><b>  {</b></p><p>  strcpy(res,token);</p><p> 

87、 scanner();</p><p><b>  }</b></p><p>  else if(syn==20) </p><p><b>  {</b></p><p>  itoa((int)sum,res,10);</p><p>  scanner();</

88、p><p><b>  }</b></p><p>  else if(syn==26) </p><p><b>  {</b></p><p>  scanner();</p><p><b>  res=E();</b></p><

89、p>  if(syn==27) </p><p><b>  {</b></p><p>  scanner();</p><p><b>  }</b></p><p>  else isError=1;</p><p><b>  }</b>&

90、lt;/p><p><b>  else</b></p><p>  isError=1;</p><p>  return res;</p><p><b>  }</b></p><p>  char *newTemp()</p><p><b&

91、gt;  {</b></p><p><b>  char *p;</b></p><p>  char varTemp[10];</p><p>  p=(char *)malloc(10);</p><p><b>  kk++;</b></p><p>  

92、itoa(kk,varTemp,10);</p><p>  strcpy(p+1,varTemp);</p><p><b>  p[0]='T';</b></p><p><b>  return p;</b></p><p><b>  }</b><

93、/p><p>  void backpatch(int p,int t) </p><p><b>  {</b></p><p>  int w,circle=p;</p><p>  while(circle)</p><p><b>  {</b></p>&

94、lt;p>  w=atoi(fourCom[circle].result); </p><p>  sprintf(fourCom[circle].result,"%d",t);</p><p>  circle=w; </p><p><b>  }</b></p><p><b>

95、  return;</b></p><p><b>  }</b></p><p>  int merge(int p1,int p2) </p><p><b>  {</b></p><p>  char circle,nResult;</p><p><

96、;b>  if(p2==0)</b></p><p>  nResult=p1;</p><p><b>  else</b></p><p><b>  {</b></p><p>  nResult=circle=p2;</p><p>  while(

97、atoi(fourCom[circle].result))</p><p><b>  {</b></p><p>  circle=atoi(fourCom[circle].result); </p><p>  sprintf(fourCom[circle].result,"%s",p1);</p><

98、;p><b>  }</b></p><p><b>  }</b></p><p>  return nResult; </p><p><b>  }</b></p><p>  void emit(char *res,char *num1,char *op,char

99、 *num2)</p><p><b>  {</b></p><p>  strcpy(fourCom[nextq].result,res);</p><p>  strcpy(fourCom[nextq].arg1,num1);</p><p>  strcpy(fourCom[nextq].opera,op);&l

100、t;/p><p>  strcpy(fourCom[nextq].arg2,num2);</p><p><b>  nextq++;</b></p><p><b>  }</b></p><p>  void scanner() </p><p><b>  {

101、 </b></p><p><b>  sum=0; </b></p><p>  decimal=0; </p><p><b>  m=0; </b></p><p>  for(n=0;n<8;n++) </p><p>  tok

102、en[n]=NULL; </p><p>  ch=prog[p++]; </p><p>  while(ch==' '||ch=='\n') </p><p>  ch=prog[p++]; </p><p>  if(((ch>='a')&&(c

103、h<='z'))||((ch>='A')&&(ch<='Z'))) </p><p><b>  { </b></p><p>  while(((ch>='a')&&(ch<='z'))||((ch>='

104、;A')&&(ch<='Z'))||((ch>='0')&&(ch<='9'))) </p><p><b>  { </b></p><p>  token[m++]=ch; </p><p>  ch=prog[p++];

105、 </p><p><b>  } </b></p><p>  token[m++]='\0'; </p><p><b>  p--; </b></p><p><b>  syn=10; </b></p><p>

106、  for(n=0;n<9;n++) </p><p>  if(strcmp(token,rwtab[n])==0) </p><p><b>  { </b></p><p>  syn=n+1; </p><p><b>  break; </b></p>

107、<p><b>  } </b></p><p><b>  }</b></p><p>  else if((ch>='0')&&(ch<='9')) </p><p><b>  {</b></p>&

108、lt;p><b>  IsNum:</b></p><p>  if(isSignal==1)</p><p><b>  {}</b></p><p>  while((ch>='0')&&(ch<='9')) </p><p>

109、;<b>  { </b></p><p>  sum=sum*10+ch-'0'; </p><p>  ch=prog[p++]; </p><p><b>  } </b></p><p>  if(ch=='.') </p>

110、<p><b>  { </b></p><p>  isDecimal=1; </p><p>  ch=prog[p++]; </p><p><b>  count=0; </b></p><p>  while((ch>='0')&&

111、;(ch<='9')) </p><p><b>  {</b></p><p>  temp=(ch-'0')*pow(0.1,++count); </p><p>  decimal=decimal+temp;</p><p>  ch=prog[p++]; <

112、/p><p><b>  } </b></p><p>  sum=sum+decimal; </p><p><b>  } </b></p><p>  if(ch=='e'||ch=='E') </p><p><b&g

113、t;  { </b></p><p>  isExp=1; </p><p>  ch=prog[p++]; </p><p>  if(ch=='-') </p><p><b>  { </b></p><p>  isNegative=1;

114、 </p><p>  ch=prog[p++]; </p><p><b>  } </b></p><p>  while((ch>='0')&&(ch<='9')) </p><p><b>  { </b></

115、p><p>  index=index*10+ch-'0'; </p><p>  ch=prog[p++]; </p><p><b>  } </b></p><p>  if(isNegative) </p><p>  sum=sum*pow(0.1,index

116、); </p><p><b>  else </b></p><p>  sum=sum*pow(10,index); </p><p><b>  } </b></p><p>  if(isSignal==1)</p><p><b>  {&l

117、t;/b></p><p><b>  sum=-sum;</b></p><p>  isSignal=0;</p><p><b>  }</b></p><p><b>  p--; </b></p><p>  syn=20; &l

118、t;/p><p><b>  } </b></p><p>  else switch(ch) </p><p><b>  { </b></p><p>  case '<': </p><p><b>  m=0; <

119、/b></p><p>  token[m++]=ch; </p><p>  ch=prog[p++]; </p><p>  if(ch=='=') </p><p><b>  { </b></p><p>  syn=35; </p>

120、<p>  token[m++]=ch; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  syn=34; </p><p

121、><b>  p--; </b></p><p><b>  } </b></p><p><b>  break; </b></p><p>  case '>': </p><p><b>  m=0; </b

122、></p><p>  token[m++]=ch; </p><p>  ch=prog[p++]; </p><p>  if(ch=='=') </p><p><b>  { </b></p><p>  syn=33; </p>&

123、lt;p>  token[m++]=ch; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  syn=32; </p><p>

124、;<b>  p--; </b></p><p><b>  } </b></p><p><b>  break; </b></p><p>  case '=': </p><p><b>  m=0; </b>&l

125、t;/p><p>  token[m++]=ch; </p><p>  ch=prog[p++]; </p><p>  if(ch=='=') </p><p><b>  { </b></p><p>  syn=36; </p><p&g

126、t;  token[m++]=ch; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  syn=21; </p><p><b

127、>  p--; </b></p><p><b>  } </b></p><p><b>  break; </b></p><p><b>  case '+':</b></p><p>  temp2=prog[p];<

128、/p><p>  token[m++]=ch;</p><p>  if((temp2>='0')&&(temp2<='9')&&(repeat==1))</p><p><b>  {</b></p><p>  isSignal=2;</p

129、><p>  ch=prog[p++];</p><p><b>  repeat=0;</b></p><p>  goto IsNum;</p><p><b>  }</b></p><p>  if(((temp2=='+')||(temp2=='

130、-'))&&(repeat==0)) </p><p><b>  {</b></p><p><b>  repeat=1;</b></p><p>  }syn=22;</p><p><b>  break;</b></p>

131、<p><b>  case '-':</b></p><p>  temp2=prog[p];</p><p>  token[m++]=ch;</p><p>  if((temp2>='0')&&(temp2<='9')&&(repeat

132、==1))</p><p><b>  {</b></p><p>  isSignal=1;</p><p>  ch=prog[p++]; </p><p><b>  repeat=0;</b></p><p>  goto IsNum; </p>&l

133、t;p><b>  }</b></p><p>  if(((temp2=='+')||(temp2=='-'))&&(repeat==0)) </p><p><b>  {</b></p><p>  repeat=1; </p><p>

134、<b>  }</b></p><p><b>  syn=23;</b></p><p><b>  break; </b></p><p><b>  case '*':</b></p><p>  temp2=prog[p];<

135、/p><p>  token[m++]=ch;</p><p>  if(temp2=='+')</p><p><b>  {</b></p><p>  isSignal=2;</p><p><b>  repeat=1;</b></p>&l

136、t;p><b>  }</b></p><p>  else if(temp2=='-')</p><p><b>  {</b></p><p>  isSignal=1;</p><p><b>  repeat=1;</b></p>&

137、lt;p><b>  }</b></p><p><b>  syn=24;</b></p><p><b>  break;</b></p><p>  case '/': </p><p>  syn=25; </p><p

138、>  token[m++]=ch; </p><p>  break; </p><p><b>  case '(':</b></p><p>  temp2=prog[p];</p><p>  token[m++]=ch;</p><p>  if(temp2

139、=='+')</p><p><b>  {</b></p><p>  isSignal=2;</p><p><b>  repeat=1;</b></p><p><b>  }</b></p><p>  else if(temp

140、2=='-')</p><p><b>  {</b></p><p>  isSignal=1;</p><p><b>  repeat=1;</b></p><p><b>  }</b></p><p><b>  sy

141、n=26;</b></p><p><b>  break;</b></p><p>  case ')': </p><p>  syn=27; </p><p>  token[m++]=ch; </p><p><b>  break;

142、</b></p><p>  case '{': </p><p>  syn=28; </p><p>  token[m++]=ch; </p><p><b>  break; </b></p><p>  case '}':

143、</p><p>  syn=29; </p><p>  token[m++]=ch; </p><p><b>  break; </b></p><p>  case ',': </p><p>  syn=30; </p><p>

144、  token[m++]=ch; </p><p><b>  break; </b></p><p>  case ';': </p><p>  syn=31; </p><p>  token[m++]=ch; </p><p><b>  bre

145、ak; </b></p><p>  case'#': </p><p><b>  syn=0; </b></p><p>  token[m++]=ch; </p><p><b>  break; </b></p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論