




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1一、上機實驗一、上機實驗(shyn)的的目的目的 通過做上機題加深對編譯器構造原理和方法的理解,鞏固所學知識。通過做上機題加深對編譯器構造原理和方法的理解,鞏固所學知識。 會用正規(guī)式和產生式設計簡單語言的語法;會用正規(guī)式和產生式設計簡單語言的語法; 會用遞歸下降子程序編寫會用遞歸下降子程序編寫(binxi)(binxi)編譯器或解釋器;編譯器或解釋器; 會寫上機報告。會寫上機報告。二、上機題目(tm)簡單函數繪圖語言的解釋器 2.1 題目(tm)簡述 實現簡單函數繪圖的語句實現簡單函數繪圖的語句循環(huán)繪圖(循環(huán)繪圖(FOR-DRAWFOR-DRAW)比例設置(比例設置(SCALESCALE)角
2、度旋轉(角度旋轉(ROTROT)坐標平移(坐標平移(ORIGINORIGIN)注釋注釋 (- - 或或 / /) 屏幕(窗口)的坐標系屏幕(窗口)的坐標系左上角為原點左上角為原點x x方向從左向右增長方向從左向右增長y y方向從上到下增長方向從上到下增長( (與一般的坐標與一般的坐標系方向相反系方向相反) )第1頁/共25頁第一頁,共26頁。2 函數繪圖函數繪圖(hu t)(hu t)源程序舉例源程序舉例 - - 函數函數f(t)=tf(t)=t的圖形的圖形origin is (100, 300);origin is (100, 300);- - 設置原點的偏移量設置原點的偏移量rot is
3、0;rot is 0;- - 設置旋轉角度設置旋轉角度(jiod)(jiod)(不旋轉不旋轉) )scale is (1, 1);scale is (1, 1);- - 設置橫坐標和縱坐標的比例設置橫坐標和縱坐標的比例for T from 0 for T from 0 toto 200 step 1 draw (t, 0); 200 step 1 draw (t, 0);- - 橫坐標的軌跡(縱坐標為橫坐標的軌跡(縱坐標為0 0)for T from 0 for T from 0 toto 150 step 1 draw (0, -t); 150 step 1 draw (0, -t);- -
4、 縱坐標的軌跡(橫坐標為縱坐標的軌跡(橫坐標為0 0)for T from 0 for T from 0 toto 120 step 1 draw (t, -t); 120 step 1 draw (t, -t);- - 函數函數f(t)=tf(t)=t的軌跡的軌跡 默認值:默認值:origin is (0, 0)origin is (0, 0)rot is 0;rot is 0;scale is (1, 1)scale is (1, 1)第2頁/共25頁第二頁,共26頁。32.2 2.2 語句語句(yj)(yj)的語法和語義(的語法和語義(syntax & syntax &
5、semanticssemantics) 語句滿足下述規(guī)定(原則): 各類語句可以按任意次序書寫,且語句以分號結尾。源程序中的語句以它們出現的先后順序處理。 ORIGIN、ROT和SCALE 語句只影響其后的繪圖語句,且遵循最后出現的語句有效的原則。例如,若有下述ROT語句序列: ROT IS 0.7 ;ROT IS 1.57 ;則隨后的繪圖語句將按1.57而不是0.7弧度(hd)旋轉。 無論ORIGIN、ROT和SCALE語句的出現順序如何,圖形的變換順序總是:比例變換旋轉變換平移變換 語言對大小寫不敏感,例如for、For、FOR等,均被認為是同一個保留字。 語句中表達式的值均為雙精度類型,
6、旋轉角度單位為弧度(hd)且為逆時針旋轉,平移單位為點。 第3頁/共25頁第三頁,共26頁。42.2.1 2.2.1 循環(huán)循環(huán)(xnhun)(xnhun)繪圖(繪圖(FOR-DRAW FOR-DRAW )語句語句 語法(yf):語義:舉例:說明:注意:FOR T FROM FOR T FROM 起點起點 TOTO 終點終點 STEP STEP 步長步長 DRAW( DRAW(橫坐標橫坐標, , 縱坐標縱坐標););令令T T從起點到終點、每次改變一個步長,繪制出由從起點到終點、每次改變一個步長,繪制出由( (橫坐標,縱坐標橫坐標,縱坐標) )所規(guī)定的點的軌跡。所規(guī)定的點的軌跡。FOR T FR
7、OM 0 FOR T FROM 0 TOTO 2 2* *PI STEP PI/50 DRAW (cos(T), sin(T);PI STEP PI/50 DRAW (cos(T), sin(T);該語句該語句(yj)(yj)的作用是令的作用是令T T從從0 0到到2 2* *PIPI、步長、步長 PI/50 PI/50,繪制出各個點的坐標,繪制出各個點的坐標(cos(T)(cos(T),sin(T)sin(T),即一個單位園。,即一個單位園。由于繪圖系統(tǒng)的默認值是ORIGIN IS (0,0);ORIGIN IS (0,0);ROT IS 0;ROT IS 0;SCALE IS (1, 1)
8、;SCALE IS (1, 1);所以實際繪制出的圖形是在屏幕左上角的一個點。第4頁/共25頁第四頁,共26頁。52.2.2 2.2.2 比例設置比例設置(shzh)(SCALE)(shzh)(SCALE)語句語句語法(yf):語義:舉例:說明:SCALE IS (SCALE IS (橫坐標比例因子,縱坐標比例因子橫坐標比例因子,縱坐標比例因子););設置設置(shzh)(shzh)橫坐標和縱坐標的比例,并分別按照比例因子進行縮放。橫坐標和縱坐標的比例,并分別按照比例因子進行縮放。SCALE IS (100, 100);SCALE IS (100, 100);將橫坐標和縱坐標的比例設置將橫坐標
9、和縱坐標的比例設置(shzh)(shzh)為為1:11:1,且放大,且放大100100倍。倍。語法:語義:舉例:說明:ORIGIN ISORIGIN IS (橫坐標,縱坐標); 將坐標系的原點平移到橫坐標和縱坐標規(guī)定的點處。ORIGIN IS (360, 240);ORIGIN IS (360, 240); 將原點從(0, 0)(0, 0)平移到(360, 240)(360, 240) 處。若: SCALE IS (100, 100/3);SCALE IS (100, 100/3); 則:橫坐標和縱坐標的比例為3:13:1。第5頁/共25頁第五頁,共26頁。62.2.4 2.2.4 角度角度(
10、jiod)(jiod)旋轉旋轉(ROT)(ROT)語句語句語法(yf):語義:舉例:說明:ROT IS ROT IS 角度;角度; 逆時針旋轉角度所規(guī)定的弧度逆時針旋轉角度所規(guī)定的弧度(hd)(hd)值。具體計算公式:值。具體計算公式:旋轉后旋轉后X=X=旋轉前旋轉前X X* *COS(COS(角度角度)+)+旋轉前旋轉前Y Y* *SIN(SIN(角度角度) ) 旋轉后旋轉后Y=Y=旋轉前旋轉前Y Y* *COS(COS(角度角度)-)-旋轉前旋轉前X X* *SIN(SIN(角度角度) )公式的推導可參閱輔助教材。公式的推導可參閱輔助教材。ROT IS PI/2; ROT IS PI/2;
11、 逆時針旋轉逆時針旋轉PI/2PI/2,即逆時針旋轉,即逆時針旋轉9090度。度。2.2.5 注釋語句 注釋的作用:語法:語義:便于理解;屏蔽暫時不需要的語句。/ This is a comment line/ This is a comment line 或 - 此行是注釋 / 或 - 之后,直到行尾,均是注釋第6頁/共25頁第六頁,共26頁。7語句功能語句功能(gngnng)(gngnng)的測試的測試ORIGIN IS (360, 240);ORIGIN IS (360, 240);/ (1) / (1) 原點移至原點移至(360, 240)(360, 240)SCALE IS (100
12、, 100);SCALE IS (100, 100);/ (2) / (2) 圖形圖形(txng)(txng)放大放大100100SCALE IS (100, 100/3);SCALE IS (100, 100/3);/ (3) / (3) 縱坐標縮小為三分之一縱坐標縮小為三分之一ROT IS PI/2;ROT IS PI/2;/ (4) / (4) 逆時針旋轉逆時針旋轉9090度度- - 繪制園的軌跡繪制園的軌跡FOR T FROM 0 FOR T FROM 0 TOTO 2 2* *PI STEP PI/50 DRAW (cos(T), sin(T);PI STEP PI/50 DRAW
13、(cos(T), sin(T);僅僅(1)(1)和和(2)(2)加入加入(3)(3)加入加入(4)(4)第7頁/共25頁第七頁,共26頁。8其他函數其他函數(hnsh)(hnsh)圖形:圖形:看實例看實例(shl)第8頁/共25頁第八頁,共26頁。92.3 2.3 記號記號(j ho)(j ho)的語法和語義的語法和語義 記號的種類(zhngli):常數、參數、函數、保留字、運算符、分隔符 常數 常數字面量和標識符形式的常量名均稱為常數。字面量的形式為普通的數值,如果沒有小數部分,可以(ky)省略小數點。例如2、2.、2.0都是合法的常數。 標識符PI、E也是常數,它們分別代表圓周率和自然對數
14、的底。常數不能有符號位,如-1和+2不是常數而是(一元運算的)表達式。 參數 本作圖語言中唯一的、已經被定義好的變量名T T被稱為參數,它也是一個表達式。由于作圖語言中只有這唯一的變量,因此作圖語言中無需變量或參數的聲明和定義語句。 第9頁/共25頁第九頁,共26頁。102.3 2.3 記號記號(j ho)(j ho)的語法和語義(續(xù))的語法和語義(續(xù)) 保留字:語句(yj)中具有固定含義的標識符,包括:ORIGIN, SCALE, ROT, IS, TO, STEP, DRAW, FOR, FROM 運算符PLUS, MINUS, MUL, DIV, POWER即:+ - * /* 分隔符S
15、EMICO, L_BRACKET, R_BRACKET, COMMA即:; ( ) , 函數(調用) 為簡單起見,當前函數調用僅支持Sin、Cos、Tan、Sqrt以及Exp和Ln。有興趣的同學可以(ky)再加入其他函數。第10頁/共25頁第十頁,共26頁。11三、三、 題目題目(tm)(tm)與與要求要求1.用某種程序設計語言(如C/C+、Pascal、Java等)和遞歸下降子程序方法編寫完整的解釋器,由于環(huán)境限制,本書統(tǒng)一采用C/C+程序設計語言;2.利用編譯器編寫工具(gngj)LEX/YACC提供的方式規(guī)定繪圖語言的詞法和語法,用C/C+語言編寫解釋器的語義。3.1 解釋器的實現(sh
16、xin)方法題目:為函數繪圖語言編寫一個解釋器 解釋器接受用繪圖語言編寫的源程序,經語法和語義分析之后,將源程序所規(guī)定的圖形顯示在顯示屏(或窗口)中。目的:通過自己動手編寫解釋器,掌握語言翻譯特別是語言識別的基本方法。第11頁/共25頁第十一頁,共26頁。123.1 3.1 解釋器的實現解釋器的實現(shxin)(shxin)方法方法 兩種方法的語義部分(b fen)基本相同,主要區(qū)別在于詞法和語法分析器的構造是手工完成還是借助于工具完成。 第12頁/共25頁第十二頁,共26頁。133.3 3.3 任務劃分任務劃分(hu fn)(hu fn)與上機報告與上機報告 任務劃分:(三個階段)詞法分析
17、器、語法分析器、語義分析器機時比例(大概):1:1:1要求:驗收經過測試的程序提交上機報告(bogo)。其中上機報告(bogo)可以包括以下內容: 任務與目的 軟件設計a. 軟件的總體結構與模塊劃分b. 關鍵算法與重要數據結構 測試例程設計與測試結果分析 總結、體會、改進建議等 工作方法建議:每個階段均進行設計與測試,并且寫出報告;采用(ciyng)增量式設計;工作全部完成后將三個階段的工作進行總結即可。第13頁/共25頁第十三頁,共26頁。14四、遞歸子程序方法的參考四、遞歸子程序方法的參考(cnko)(cnko)解決方案解決方案4.1 4.1 詞法分析器的構造詞法分析器的構造 步驟:正規(guī)(
18、zhnggu)式NFADFA最小DFA編寫程序測試 4.1.1 記號的設計 詞法分析器的三個任務:1濾掉源程序中的無用成分;2輸出記號供語法分析器使用(shyng);3識別非法輸入,并將其標記為“出錯記號”。 記號的組成:記號的類別和屬性。 記號的數據結構: struct struct TokenToken/ 記號的數據結構 Token_TypeToken_Type type; type;/ 類別char char * * lexeme; lexeme;/ 屬性,原始輸入的字符串double value;double value;/ 屬性,若記號是常數則是常數的值double (double
19、(* * FuncPtr)(double); FuncPtr)(double);/ 屬性,若記號是函數則是函數指針; ; 例例2.22.2第14頁/共25頁第十四頁,共26頁。154.14.1詞法詞法(cf)(cf)分析器的構造(續(xù)分析器的構造(續(xù)1 1) 函數繪圖語言中記號(j ho)的分類與表示enum Token_Typeenum Token_Type / / 記號記號(j ho)(j ho)的類別,共的類別,共2222個個 ORIGIN, SCALE, ROT, IS,ORIGIN, SCALE, ROT, IS, / / 保留字(一字一碼)保留字(一字一碼)TOTO, STEP, D
20、RAW,FOR, FROM, / , STEP, DRAW,FOR, FROM, / 保留字保留字; ; T,T, / 參數SEMICO, L_BRACKET, R_BRACKET, COMMA,SEMICO, L_BRACKET, R_BRACKET, COMMA,/ 分隔符PLUS, MINUS, MUL, DIV, POWER,PLUS, MINUS, MUL, DIV, POWER,/ 運算符FUNC,FUNC, / 函數(調用)CONST_ID,CONST_ID, / 常數NONTOKEN,NONTOKEN, / 空記號(源程序結束)ERRTOKENERRTOKEN / 出錯記號(非
21、法輸入)下一頁下一頁關系關系第15頁/共25頁第十五頁,共26頁。164.1.2 4.1.2 模式模式(msh)(msh)的正規(guī)式表示的正規(guī)式表示 letterletter= a-zA-Z= a-zA-Zdigitdigit= 0-9 = 0-9 COMMENT COMMENT = /|-= /|-WHITE_SPACE WHITE_SPACE = ( |t|n)+= ( |t|n)+SEMICO SEMICO = ;= ;L_BRACKET L_BRACKET = (= (R_BRACKET R_BRACKET = )= )COMMA COMMA = ,= ,PLUS PLUS = += +
22、MINUS MINUS = -= -MUL MUL = = * * DIV DIV = /= /POWER POWER = = * * * CONST_ID CONST_ID = digit+(. digit= digit+(. digit* *)?)?ID ID = letter+ = letter+ (去除注釋(去除注釋(zhsh)(zhsh)與白空有與白空有1111個正規(guī)式)個正規(guī)式) 由于是手工構造詞法分析器,而正規(guī)式個數越少越便于程序的編寫,因此設計上采用相同模式的記號共用一個正規(guī)式的方法。 常數的字面量部分設計為CONST_ID,而常量(chngling)名則合并到ID中。 這就帶
23、來一個問題,函數繪圖語言中的保留字、常量(chngling)名、參數名、以及函數名均被描述為ID,當識別出ID時,如何再細分它們? 上一頁上一頁關系關系第16頁/共25頁第十六頁,共26頁。174.1.3 4.1.3 區(qū)分區(qū)分(qfn)(qfn)記號的符號表記號的符號表 static Token TokenTab =static Token TokenTab = CONST_ID,CONST_ID,PI,PI,3.1415926,3.1415926,NULL,NULL,CONST_ID,CONST_ID,E,E,2.71828,2.71828,NULL,NULL, 預先(yxin)定義且內容不
24、變的符號表更多被習慣地稱為字典。 T,T,T,T,0.0,0.0,NULL,NULL,FUNC,FUNC,SIN,SIN,0.0,0.0,sin,sin,FUNC,FUNC,COS,COS,0.0,0.0,cos,cos,FUNC,FUNC,TAN,TAN,0.0,0.0,tan,tan,FUNC,FUNC,LN,LN,0.0,0.0,log,log,FUNC,FUNC,EXP,EXP,0.0,0.0,exp,exp,FUNC,FUNC,SQRT,SQRT,0.0,0.0,sqrt,sqrt,ORIGIN,ORIGIN,ORIGIN,ORIGIN,0.0,0.0,NULL,NULL,SCALE
25、,SCALE,SCALE,SCALE,0.0,0.0,NULL,NULL,ROT,ROT,ROT,ROT,0.0,0.0,NULL,NULL,IS,IS,IS,IS,0.0,0.0,NULL,NULL,FOR,FOR,FOR,FOR,0.0,0.0,NULL,NULL,FROM,FROM,FROM,FROM,0.0,0.0,NULL,NULL,TO,TO,TO,TO,0.0,0.0,NULL,NULL,STEP,STEP,STEP,STEP,0.0,0.0,NULL,NULL,DRAW,DRAW,DRAW,DRAW,0.0,0.0,NULLNULL;關系關系(gun x)(gun x)第17頁
26、/共25頁第十七頁,共26頁。18三者之間的關系三者之間的關系(gun x)(gun x)1.記號類別(enum Token_Type):作用是規(guī)定所有記號的類別;2.正規(guī)式:作用是描述和識別所有類別的記號;3.字典:作用是區(qū)分(qfn)同一模式下的不同記號; 當輸入被匹配為ID時,首先去查字典,從字典中得到此ID所代表的記號,然后返回記號信息給語法分析器。 內部識別的模式與外部返回的記號之間不是一一對應的,可以根據實際(shj)情況設計,原則是能夠正確識別和返回所有記號,且便于程序實現。ROT IS PI/6ROT IS PI/6第18頁/共25頁第十八頁,共26頁。19例例2.2 2.2
27、語句語句(yj) ROT IS PI/6 (yj) ROT IS PI/6 的記號流的記號流ROTNULLISNULLCONST_IDNULLDIVNULLCONST_IDNULL 存放存放(cnfng)(cnfng)記號的數據結構記號的數據結構第19頁/共25頁第十九頁,共26頁。204.1.4 4.1.4 正規(guī)正規(guī)(zhnggu)(zhnggu)式的式的DFA DFA letterletter= a-zA-Z= a-zA-Zdigitdigit= 0-9 = 0-9 ID = letter+ID = letter+CONST_ID = digit+(. digitCONST_ID = di
28、git+(. digit* *)?)?POWER = POWER = * * * COMMENT = /|-COMMENT = /|-SEMICO = ;SEMICO = ;L_BRACKET = (L_BRACKET = (R_BRACKET = )R_BRACKET = )COMMA = ,COMMA = ,PLUS = +PLUS = +MINUS = -MINUS = -MUL = MUL = * * DIV = /DIV = /“WHITE_SPACE = ( |t|n)WHITE_SPACE = ( |t|n)+ +注意:WHITE_SPACE(白空)沒有(mi yu)在DFA中。
29、如何處理白空?第20頁/共25頁第二十頁,共26頁。214.1.5 4.1.5 詞法詞法(cf)(cf)分析器的程序框架分析器的程序框架struct Token token=ERRTOKEN, “ ”, 0.0, NULL; / struct Token token=ERRTOKEN, “ ”, 0.0, NULL; / 用于返回記號用于返回記號token.lexeme = TokenBuffer;token.lexeme = TokenBuffer;/ / 記號的字符記號的字符(z f)(z f)指針指向字符指針指向字符(z f)(z f)緩沖區(qū)緩沖區(qū)(其中的輔助(fzh)函數和變量看教材)
30、 char =GetChar();char =GetChar();/ 從源文件中讀取一個字符/ 空格、TABTAB、回車等字符的過濾AddInTokenString (char);AddInTokenString (char);/ 將讀入的字符放進緩沖區(qū)TokenBufferTokenBuffer中if (isalpha(char) if (isalpha(char) / / 識別IDID else if (isdigit(char) else if (isdigit(char) / 識別數字常量 else else switch(char) switch(char) case case ;
31、;: token.type = SEMICO; : token.type = SEMICO; return token; return token; 第21頁/共25頁第二十一頁,共26頁。224.1.6 4.1.6 與語法分析器的接口與語法分析器的接口(ji ku) (ji ku) 詞法(cf)分析器的測試#include scanner.h#include scanner.hvoid main(int argc, char void main(int argc, char * *argv)argv) Token token; Token token; if (argc2) printf(p
32、lease input Source File !n ); return;if (argc2) printf(please input Source File !n ); return;if (!InitScanner(argv1) / if (!InitScanner(argv1) / 初始化詞法初始化詞法(cf)(cf)分析器分析器 printf(Open Source File Error ! n); return; printf(Open Source File Error ! n); return; printf(printf(記號類別 字符串 常數值 函數指針n);n);printf(_n);printf(_n);while(1) while(1) token = token = GetToken GetToken()(); ;/ 通過詞法分析器獲得一個記號 if(token.type != NONTOKEN)if(token.type != NONTOKEN)/ 打印記號的內容printf(%4d,%12s,%12f,%12xn,printf(%4d,%12s,%12f,%12xn,token.type,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安工作總結計劃安全設備行業(yè)保安工作的設備測試
- 企業(yè)財務戰(zhàn)略與市場策略的協調計劃
- 提高學生美術表達能力的策略計劃
- 消費者關系管理的工作計劃
- 2025年中國休閑食品行業(yè)市場運行態(tài)勢、市場規(guī)模及發(fā)展趨勢研究報告
- 七年級下冊《一元一次不等式的解法》課件與練習
- 2025年真空采血管項目發(fā)展計劃
- 構建穩(wěn)定異步消息傳遞框架
- 2025年印鐵油墨項目建議書
- 白雪公主的童話世界解讀
- 二年級下冊數學計算題400道及答案
- 第6課《飛向藍天的恐龍》兩課時學習任務單部編版四年級語文下冊
- 生產清場管理制度課件
- 小學科學質量分析報告
- 口腔醫(yī)院客服培訓課件
- 04G325吊車軌道聯結及車擋
- 2024年金城出版社有限公司招聘筆試參考題庫含答案解析
- 皮下注射的并發(fā)癥及預防
- 羅沙司他治療腎性貧血的療效與安全性評價演示稿件
- 混凝土攪拌站有限空間作業(yè)管理制度模版
- 苯板廠應急預案范本
評論
0/150
提交評論