簡單詞法分析程序設(shè)計_第1頁
簡單詞法分析程序設(shè)計_第2頁
簡單詞法分析程序設(shè)計_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一簡單詞法分析程序設(shè)計一、實驗?zāi)康牧私庠~法分析程序的根本構(gòu)造原理,掌握詞法分析程序的手工構(gòu)造方法。二、實驗內(nèi)容1、了解編譯程序的詞法分析過程。2、根據(jù)PASCALS言的說明語句形式,用手工方法構(gòu)造一個對說明語句進行詞法分析的程序。該程序能對從鍵盤輸入或從文件讀入的形如:“ const count=10,sum=81.5,char1= ' f ' ,string1= hj , max=169 ; 的常量說明串進行處理, 分析常量說明串中各常量名、 常量類型及常量值, 并統(tǒng)計各種類型 常量 個數(shù)。三、實驗要求1、輸入的常量說明串,要求最后以分號作結(jié)束標志;2、 根據(jù)輸入串或讀入

2、的文本文件中第一個單詞是否為“const 判斷輸入串或文本文件 是 否為常量說明內(nèi)容;3、 識別輸入串或翻開的文本文件中的常量名。常量名必須是標識符, 定義為字母開頭, 后 跟假設(shè)干個字母,數(shù)字或下劃線;4、根據(jù)各常量名緊跟等號“ =后面的內(nèi)容判斷常量的類型。其中:字符型常量定義為放在單引號內(nèi)的一個字符;字符串常量定義為放在雙引號內(nèi)所有內(nèi)容; 整型常量定義為帶或不帶 +、- 號, 不以 0 開頭的假設(shè)干數(shù)字的組合; 實型常量定義為帶或不帶 +、- 號,不以 0 開頭的假設(shè)干數(shù)字加上小數(shù)點再后跟假設(shè)干數(shù)字的組合;5、統(tǒng)計并輸出串或文件中包含的各種類型的常量個數(shù);6、以二元組 ( 類型,值)的形式

3、輸出各常量的類型和值;7、根據(jù)常量說明串置于高級語言源程序中時可能出現(xiàn)的錯誤情況,模仿高級語言編譯器對不同錯誤情況做出相應(yīng)處理。四、運行結(jié)果1、輸入如下正確的常量說明串: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,'

4、)str2(string,“aa!+h )2、輸入類似如下的保存字 const 錯誤的常量說明串:Aconstt count=10,sum=81.5,char1=f ' ;輸出類似下面的錯誤提示信息:It is not a constant declaration statement!Please input a string again!3、輸入類似如下含常量名或常量值錯誤的常量說明串:const count=10,12sum=81.5,char1= ff ' ,max=0016 ; 輸出類似下面的錯誤提示信息:count(integer,10)12sum(Wrong! It

5、 is not a identifier!) char1(Wrong! There are more than one char in' .)max(Wrong! The integer can ' t be started with0' .)int_num=1; char_num=0; string_num=0; float_num=0.4、其他類型的錯誤處理情況 (略) 。五、提示本實驗重點有三個:一是作為常量名的標識符的識別;二是如何根據(jù)“=后出現(xiàn)的內(nèi)容來判斷常量類型;三是對各種錯誤的處理。難點是對整型和實型常量的判斷必須綜 合考慮多種可 能情況。建議: 1、用指

6、針或數(shù)組與指針相結(jié)合來處理輸入的常量說明串;2、對整型和實型常量處理時,重點考慮常數(shù)中 0' 的位置。六、分析與討論1、假設(shè)考慮用 E 或 e 的科學(xué)計數(shù)法來表示整數(shù)和實數(shù),應(yīng)該如何實現(xiàn)?2、假設(shè)考慮布爾型常量,且規(guī)定其值只能為 true 或 false ,應(yīng)該如何實現(xiàn)?3、如何對手工構(gòu)造的詞法分析程序做進一步的優(yōu)化,以提高代碼質(zhì)量和運行效率?七代碼#include"stdio.h" #include"ctype.h" #include<stdlib.h> #include<string.h>#include<win

7、dows.h> #define N 80 #define M 16 char *p0,*t0,*p1,*t1, *p2,*str,*p3,*t3="const",*digi,*flo;char cha;int ci=0,cf=0,cc=0,cs=0;void main()void measurefw();void measure_iden();void measure_str();void measure_digit();void measure_cha();printf("nInput string: n");p0=(char *)malloc(

8、N*sizeof(char);p1=(char *)malloc(M*sizeof(char);p2=(char *)malloc(M*sizeof(char);p3=(char *)malloc(M*sizeof(char);gets(p0);printf("n");measurefw();/* 開始處理輸入串 p0 */while(*(p0)=' '|*(p0)=',') /* 從串 p0 中取標識符,并將 其作為 常量名存放到串 p1 中 */p0+;if(*(p0)=' '|*(p0)=',')cont

9、inue;else注意 ' 和" 做字measure_iden(); /*p0="=" if(!isdigit(*p0)&&*p0!='"'&&*p0!=''')/處理字符串常量*/處理數(shù)字*/符表示時用 ' 和 "system("cls"); printf("n Const data is wrong . Exit !");exit(0);else if(*p0='"') /*p0+;mea

10、sure_str();else if(isdigit(*p0) /*measure_digit();else if(*p0=''') /處理字符常p0+; measure_cha();string_num=%d;開頭 */if(*p0!='') system("cls");printf("n This centence is wrong . Exit !"); exit(0);elseprintf("int_num=%d; char_num=%d; float_num=%d.n",ci,cc,c

11、s,cf); void measurefw()while(*p0!=' ') /*檢查輸入串是否以"'constif(*p0=*t3)p0+;t3+;elsesystem("cls");printf("nThis string isn't a const declaration!"); exit(0);/ printf("This string is a const declaration!n");void measure_iden()if (*p0!='_'&&

12、;(!isalpha(*p0)system("cls");printf("n Const name is wrong . Exit !"); exit(0);else if (*p0='_'|isalpha(*p0)t1=p1;while(*p0!='=') *p1=*p0;p0+;p1+;*p1='0'/ printf("%sn",p0); p0+;printf("%s",t1);void measure_str()str=p2;while(*(p0)!='

13、"') String data is*p2=*p0; 丟了個分號,直接輸出 if(*(p0)='')/ wrong. Exitsystem("cls");printf("n String data is wrong. Exit !"); exit(0); p0+;p2+;*p2='0'p0+;cs+;printf("(string,"%s")n",str);void measure_digit()char *jud;int mark=0;jud=p0;for(;*(

14、jud)!=','&&*(jud)!=''jud+)if(*jud='.')mark=1;break;if(mark=0)digi=p2;while(*p0!=','&&*p0!='')*p2=*p0;p0+;p2+;*p2='0'ci+;printf("(integer,%s)n",digi);if(mark=1)flo=p2;while(*p0!=','&&*p0!='')*p2=*p0;p0+;p2+; *p2='0' cf+;printf("(float,%s)n",flo);void measure_cha()char *

溫馨提示

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

評論

0/150

提交評論