




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、、PLC控制電路的設計根據(jù)系統(tǒng)的控制要求、系統(tǒng)的總體設計及系統(tǒng)所選的元器件,設計出系統(tǒng)的控制原理圖及PLC外部接線圖,如圖36所示太陽能熱水器系統(tǒng)PLC I/O控制原理電路圖。隔離變壓器隔離變壓器圖37 太陽能熱水器系統(tǒng)PLC I/O控制原理電路圖3.2 系統(tǒng)軟件設計方案可編程控制器是掃描工作方式,能同時對多個模塊進行控制,在整個程序掃描時間里加上不同的輸入檢測信號,就可使程序按所檢測信號判斷進入不同的分支程序。主程序包含有多個分支程序,這樣既提高了編程的靈活性又減少了不必要的代碼重復,同時也方便以后系統(tǒng)擴展對軟件的修改,系統(tǒng)主要是接收上位機的控制參數(shù),并完成太陽能熱水器溫度、液位的測量和控制
2、任務。3.2.1 軟件組成軟件系統(tǒng)通常分為兩大類:一類是系統(tǒng)軟件,另一類是應用軟件。系統(tǒng)軟件指的是操作系統(tǒng)、程序設計系統(tǒng)等與計算機密切相關的程序。系統(tǒng)軟件一般由計算機生產商或各種軟件公司提供,帶有一定的通用性,用不著自己編寫。本課題采用日本三菱公司的PLC,所以系統(tǒng)軟件是由三菱公司提供的,該軟件對系統(tǒng)進行實時監(jiān)控。應用軟件是用戶根據(jù)要解決的實際問題而編寫的各種程序。在計算機控制系統(tǒng)中,每個控制對象或控制任務都要有相應的控制程序,用這些控制程序來完成對象的不同要求,這種程序通常稱為應用程序。本課題主要根據(jù)太陽能熱水器的各種輸入輸出狀態(tài)來編制PLC的梯形圖程序。3.2.2 系統(tǒng)控制流程圖1、建立系
3、統(tǒng)控制流程圖根據(jù)系統(tǒng)的控制要求及實際的控制需要,繪制系統(tǒng)控制流程圖1)主程序控制系統(tǒng)流程圖水位子程序水位子程序溫度子程序圖38 主程序控制系統(tǒng)流程圖2)水位子程序流程圖圖39 水位子程序流程圖3)溫度子程序流程圖圖310 溫度子程序流程圖4) 除塵子程序流程圖 圖311除塵子程序流程圖流程圖簡介:PLC投入運行,系統(tǒng)處于初始狀態(tài),準備好起動。根據(jù)太陽能熱水器定時器設定的工作的時間段看是否到工作時間。如果沒有到則系統(tǒng)停止。如果到工作時間。則調用溫度子程序和水位自程序。根據(jù)水箱內的水位和水溫進行PID調節(jié)。如果水箱內的水位低于設定值。則打開進水閥。先供水5分鐘。然后停2分鐘,實現(xiàn)節(jié)水功能。如果水箱
4、內的水溫低于設定值。則進行加熱。如果水位過高或者水溫過高。則系統(tǒng)發(fā)出報警信號。當外部環(huán)境溫度超過4度時。則調用除塵子程序。除塵時。電機先正轉20秒。然后電機反轉20秒。循環(huán)直到除塵達到2分鐘時。則返回從開始的全部動作,進行下一次大循環(huán)。此外,還可以按手動按鈕以實現(xiàn)手動供水、排水和手動加熱功能。3.2.3 設計PLC控制原理(梯形圖程序)程序設計:用流程圖表達出各控制對象的動作順序,相互間的制約關系。明確寄存器空間的分配,專用寄存器的確定等。控制系統(tǒng)的程序的設計,主程序的編制及各功能子程序的編制以及程序的調試。其他輔助程序的設計,如故障應急程序等。根據(jù)控制系統(tǒng)流程圖,繪制太陽能熱水器系統(tǒng)控制的梯
5、形圖和編制程序指令表,其完整梯形圖及指令表見附錄。第四章 可編程控制器(PLC)的安裝、維護和檢修4.1 PLC的安裝為保證PLC工作的可靠性,提高它的工作效率,延長其使用壽命,對使用場合、環(huán)境溫度要有一定的要求。在安裝PLC時,要滿足下列條件:環(huán)境溫度在050的范圍內;環(huán)境相對濕度應在35-85范圍內;周圍無腐蝕和易燃的氣體;應避免太陽光的直接照射及液態(tài)物質的濺射;應避免鐵屑及灰塵;避免頻繁或連續(xù)的振動及沖擊。除滿足以上環(huán)境條件外,安裝時還應該注意以下幾點:在安裝和拆卸時,PLC的所有單元必須斷電;在接觸PLC前,必須事先釋放人體所帶靜電;注意PLC周圍的通風和散熱;嚴防導線頭、鐵屑等從通風
6、窗掉入可編程控制器內部,造成印刷電路板短路,使其不能正常工作甚至水久損壞。盡可能遠離高壓電源線和高壓設備,可編程控制器高壓設備和電源線之間應留出至少200mm的距離。小型可編程控制器外殼的4個角上,均有安裝孔。有兩種安裝方法,一是底板安裝,不同的單元有不同的安裝尺寸;另一種是DIN(德國共和標準)軌道固定。DIN軌道配套使用的安裝夾板,左右各一對。在軌道上,先裝好左右夾板,裝上PLC,然后擰緊螺釘20。4.2 PLC系統(tǒng)的電源接線PLC供電電源可采用直流24V、交流1 00V120V或200V240V的工作電源。如果電源發(fā)生故障,中斷時間少于10ms ,PLC工作不受影響。若電源中斷超過10m
7、s或電源下降超過允許值,則PLC停止工作,所有的輸出點均同時斷開。當電源恢復時,若RUN輸入接通,則操作自動進行。對于電源線來的干擾,PLC本身具有足夠的抵制能力,也可以安裝一個變比為1:1的隔離變壓器,以減少設備與地之間的干擾。4.3 接地良好的接地是保證PLC可靠工作的必要條件。在接地時應注意以下幾點:PLC的接地線應為直徑在2mm以上的專用線;接地電阻應小于100;PLC的地線不能和其它設備共用;PLC的各單元地線應相連在一起。4.4 輸入接線PLC一般接受行程開關、限位開關等輸入的開關量信號。輸入接線端子是PLC與外部傳感器負載轉換信號的端口。輸入接線,一般指外部傳感器與輸入端口的接線
8、。輸入器件可以是任何無源的觸點或集電極開路的NPN管。輸入器件接通時,輸入端接通,輸入線路閉合,同時輸入指示的發(fā)光二極管亮。輸入端的一次電路與二次電路之間,采用隔離變壓器。二次電路帶RC濾波器,以防止由于輸入觸點抖動或從輸入線路串入的電噪聲引起PLC誤動作。若在輸入觸點電路串聯(lián)二極管,在串聯(lián)二極管上的電壓應小于4V。若使用帶發(fā)光二極管的舌簧開關,串聯(lián)二極管的數(shù)目不能超過兩只。另外,輸入接線還應特別注意以下幾點:輸入接線一般不要超過30m,但如果環(huán)境干擾較小,電壓降不大時,輸入接線可適當長些。輸入、輸出線不能用同一根電纜,輸入、輸出線要分開??删幊炭刂破魉芙邮艿拿}沖信號的寬度,應大于掃描周期的
9、時間。4.5 輸出接線可編程控制器有繼電器輸出、晶閘管輸出、晶體管輸出3種形式。輸出端接線分為獨立輸出和公共輸出。當PLC的輸出繼電器或晶閘管動作時,同一號碼的兩個輸出端接通。在不同組中,可采用不同類型和電壓等級的輸出電壓。但在同一組中的輸出只能用同一類型、同一電壓等級的電源。由于PLC的輸出元件被封裝在印制電路板上,并且連接至端子板,若將連接輸出元件的負載短路,將燒毀印制電路板,因此,應用熔絲保護輸出元件。采用繼電器輸出時,承受的電感性負載大小影響到繼電器的工作壽命,因此繼電器工作壽命要求長。PLC的輸出負載可能產生噪聲干擾,因此要采取措施加以控制。此外,對于能使用戶造成傷害的危險負載,除了
10、在控制程序中加以考慮之外,還應設計外部緊急停車電路,使得可編程控制器發(fā)生故障時,能將引起傷害的負載電源切斷。交流輸出線和直流輸出線不要用同一本電纜,輸出線應盡量遠離高壓線和動力線,避免并行。4.6 PLC的維護和檢修雖然PLC的設計,已使維修和運行故障減少到最小程度,但為了保證系統(tǒng)的正常工作,盡量延長系統(tǒng)的使用壽命,應定期進行維護和檢修。注意電源電壓、環(huán)境指標、I/0參數(shù)、安裝情況及備份電池等情況的檢查與維護,確保PLC的正確穩(wěn)定運行。 第五章 結 論通過本次課程設計,使太陽能熱水器達到了系統(tǒng)的各種控制要求,成功完成太陽能熱水器的PLC自動控制系統(tǒng)的設計。經過對系統(tǒng)程序的運行調試,實現(xiàn)了太陽能
11、熱水器的自動控制,也可實現(xiàn)太陽能熱水器手動控制。提高了系統(tǒng)的可靠性,達到了設計目標。設計中還是存在著一些不足,本系統(tǒng)還有待進一步的完善、改進。與國外相比,我國的太陽能熱水器的自動控制系統(tǒng)卻一直處于研究和開發(fā)階段,尤其是與太陽能熱水系統(tǒng)匹配的控制系統(tǒng)。國外已經發(fā)展用PLC對太陽能熱水器的精細控制,我國對太陽能熱水器自動控制系統(tǒng)的研究還有很長一段路要走。參考文獻1 袁任光.可編程序控制器技術與實例M.廣州:華南理工大學出版社,2003,215-2382 劉敏.可編程控制器技術M. 北京:機械工業(yè)出版社.2000,57-863 邱公偉.可編程控制器網(wǎng)絡通信及應用 M. 北京:清華大學出版社,2001
12、,112-1354 陳宏.可編程控制器 ( PLC) 的選型J.化工進展,2003,22 (12) :1354-13565 胡學芝.可編程控制器的選擇J.機械制造與自動化,2004,33(2):65-676 姚偉.太陽能利用與可持續(xù)發(fā)展J .中國能源,2005,27(2):46-477 李亭寒,陳小霓,等.太陽能應用技術,中國農業(yè)機械出版社,2004,25(2)12-158 趙緩,越慧,等.我國太陽能資源及其開發(fā)利用,經濟地理,1998,98-1259 劉文強.我國太陽能熱水器產業(yè)發(fā)展現(xiàn)狀及展望,2002年第4卷(第104卷),4-10 陸維德.我國太陽熱水器產業(yè)的發(fā)展,太陽能,1999年第4
13、期,23-2511 奚陽.熱管太陽能集熱器冬季運行性能研究,江西學報,1999年第J期,6-812 馮德純,賈玉英,等.透明真空平板玻璃,中國玻璃,1998年第2期,4-7 13 賈玉英,馮心,等.真空玻璃的制造,中國玻璃,2000年第6期,2-614 唐健正,賈玉英,等.真空玻璃及發(fā)展前景,新材料和應用,2001年第1期 45-4815 戴大祥,高效節(jié)能的真空玻璃,上海建材,2003年第2期,20-2I16 馮德純,賈玉英,等.真空玻璃,中國玻璃,2002年第26卷第1期,14-2017 A.Zoller,Hohle glasscheibe,Deutsches Reich Patentsch
14、rift No.3887618 R.J.Comicini Gaseous heat conduction at low pressures and temperatures, 19-2619 R.E.Collins,L.Poladian,B.A.Pailthorpe,and R.C.Mc Phedran,Heat conduction through support piilars in evacuated windows,Aust.J.Phys.44,73-86(1991)20 D.K.Benson,L.K.Smith,T.Potter,C.Christiansen,and D.E.Soul
15、e,Vacuum window,lazings for energy efficient buildings:Summary report, Internal Report SERI/TP-212-3584, SolarEnergy Research Institute,68-74(1990)致 謝時間如梭,經過兩個多月的緊張的忙碌,畢業(yè)設計終于接近尾聲,給大學的最后一課畫上了一個圓滿的句號。四年的理論學習,使我掌握了基本的專業(yè)知識、學習方法。然而,理論離不開實踐,畢業(yè)設計正是專業(yè)教學的最后一個環(huán)節(jié)它使我們使所學的知識得到復習、鞏固,加強了理論聯(lián)系實際的能力,真正把所學的知識應用到實踐中去,為
16、將來步入社會,走向工作單位打下了堅實的基礎。在各位指導教師和同學的熱心幫助下,我完成了本次設計。在畢業(yè)論文完成之際向培養(yǎng)我的學校及所有關懷和鼓勵我的老師表示深深的謝意。這次設計為我今后的工作奠定了良好的基礎,同時,使我能夠把學到的知識應用到實踐當中,也是對我四年來所學專業(yè)知識的一次檢驗。在設計過程中得到了來自方方面面的關懷與指導。尤其是指導教師李勝多老師在學習中給予了很大的幫助,為本次設計的順利完成耗費了大量的心血。在此我要向尊敬的導師表示深深的謝意!最后,感謝全體電氣化與自動化專業(yè)的老師及同學給予我的關心和幫助。由于本人能力有限,在設計過程中不妥之處在所難免,望廣大指導教師給予批評指正。謝謝
17、!附錄 梯形圖附錄 指令表0LDX0001ORM02ANIX0013OUTM04LDM05MOVK6D2010MOVK0D2115MOVK0D2220MOVK18D3025MOVK0D3130MOVK0D3235TRDD038TZCPD20D30D3M347ANDM448OUTM2149LDM2150CALLP153CALLP256MPS57LDM1658ORY00559ORT260ORX00461ORX00262ANB63ANIT164OUTY565OUTT1K300068MRD69LDT170ORM171ANB71ANB72ANIT273OUTM174OUTT2K120077MRD78LD
18、X00279ORX00580ANB81OUTY00682MRD83ANDX00284ANIT385OUTM286OUTT3120089MPP90CALLP393MPS94ANDM295OUTY01596MRD97ANDMO98OUTY00099MRD100ANDM0101OUTY001102MRD103ANDM2104OUTY002105MRD106LDY010107ORY012108AND109ANIY004110OUTY003111MPP112LDX006113ORY004114ANB115OUTY004116FEND117P1118LDM8000119MOVK180D500124MOVK
19、1800D502129MOVK3000D510134MOVH0030D511139MOVK70D512144MOVK0D515149MOVK2000D532154MOVK0D533159PLSM6161LDM6162SETM7163LDMM8002164T0K0K0H3300K1173LDM8000174FROMK0K0D501K1183LDIM7184RSTD502187LDM7188PIDD500D501D510D502197MOVD511K2M10202MPS203ANDM9204PLFM8206MPP207ANDM8208RSTM7209LDM7210OUTT246K2000213LD
20、T246214ORIM7215RSTT246217LDD501D510244OUTY010245LDM8067246OUTY016247STET248P2249LDM8000250MOVK37D150255MOVK1800D152260MOVK3000D160265MOVH0030D161270MOVK80D162275MOVK0D165280MOVK2000D182285MOVK0D183290PLSM10292LDM10293SETM11294LDM8002295T0K0K0H3300K1304LDM8000305FROMK0K0D151K1314LDIM11315RSTD152318LD
21、M11319PIDD150D151D160D152328MOVD161K2M10333MPS334ANDM13335PLFM12337MPP338ANDM10339RSTM11340LDM11341OUTT247K2000344LDT247345ORIM11346RSTT247348LDD151D200376OUTY012377LDM8067378OUTY017379STET380P3381LDM2382ORM51383ORT5384ANIM41385ANIT3386MPS387ANIT4388OUTM51389MPP390OUTT4K200393LDT4394ORM41395ANIT5396
22、ANIM51397ANIT3398OURM41399OUTT5K200402LDM51403ANIM41404OUTY013405LDM41406ANIM51407OUTY014409SRET410NOP附錄資料:不需要的可以自行刪除C語言編譯器的設計與實現(xiàn) 我們設計的編譯程序涉及到編譯五個階段中的三個,即詞法分析器、語法分析器和中間代碼生成器。編譯程序的輸出結果包括詞法分析后的二元式序列、變量名表、狀態(tài)棧分析過程顯示及四元式序列程序,整個編譯程序分為三部分:(1) 詞法分析部分(2) 語法分析處理及四元式生成部分 (3) 輸出顯示部分一詞法分析器設計 由于我們規(guī)定的程序語句中涉及單詞較少,故
23、在詞法分析階段忽略了單詞輸入錯誤的檢查,而將編譯程序的重點放在中間代碼生成階段。詞法分析器的功能是輸入源程序,輸出單詞符號。我們規(guī)定輸出的單詞符號格式為如下的二元式: (單詞種別,單詞自身的值)#define ACC -2#define syl_if 0#define syl_else 1#define syl_while 2#define syl_begin 3#define syl_end 4#define a 5#define semicolon 6#define e 7#define jinghao 8#define s 9#define L 10#define tempsy 11#d
24、efine EA 12#define EO 13#define plus 14#define times 15#define becomes 16#define op_and 17#define op_or 18#define op_not 19#define rop 20#define lparent 21#define rparent 22#define ident 23#define intconst 24函數(shù)說明 讀取函數(shù) readline( )、readch( )詞法分析包含從源文件讀取字符的操作,但頻繁的讀文件操作會影響程序執(zhí)行效率,故實際上是從源程序文件” source.dat
25、”中讀取一行到輸入緩沖區(qū),而詞法分析過程中每次讀取一個字符時則是通過執(zhí)行 readch( )從輸入緩沖區(qū)獲得的;若緩沖區(qū)已被讀空,則再執(zhí)行readline( )從 source.dat 中讀取下一行至輸入緩沖區(qū)。掃描函數(shù) scan( ) 掃描函數(shù) scan( )的功能是濾除多余空格并對主要單詞進行分析處理,將分析得到的二元式存入二元式結果緩沖區(qū)。變量處理 find( )變量處理中首先把以字母開頭的字母數(shù)字串存到 spelling 數(shù)組中,然后進行識別。識別過程是先讓它與保留關鍵字表中的所有關鍵字進行匹配,若獲得成功則說明它為保留關鍵字,即將其內碼值寫入二元式結果緩沖區(qū);否則說明其為變量,這時讓
26、它與變量名表中的變量進行匹配( 變量匹配函數(shù) find( ) ),如果成功,則說明該變量已存在并在二元式結果緩沖區(qū)中標記為此變量( 值填為該變量在變量名表中的位置),否則將該變量登記到變量名表中,再將這個新變量存入二元式緩存數(shù)組中。數(shù)字識別 number( ) 數(shù)字識別將識別出的數(shù)字填入二元式結果緩存數(shù)組。顯示函數(shù) 顯示函數(shù)的功能在屏幕上輸出詞法分析的結果( 即二元式序列程序),同時給出二元式個數(shù)及源程序行數(shù)統(tǒng)計。二語法分析器設計 語法分析器的核心是三張 SLR 分析表以及針對這三張 SLR 分析表進行語義加工的語義動作。編譯程序中語法分析處理及四元式生成部分主要是以二元式作為輸入,并通過 S
27、LR 分析表對語法分析處理過程進行控制,使四元式翻譯的工作有條不紊的進行,同時識別語法分析中的語法錯誤。在處理 if 和 while 語句時,需要進行真值或假值的拉鏈和返填工作,以便轉移目標的正確填入。1. 控制語句的 SLR 分析表1 設計過程如下: 將擴展文法GS S1)S if e S else S2)S while e S3)S L 4)S a;5)L S6)L SL用_CLOSURE方法構造LR(0)項目規(guī)范簇為:I0: S SS if e S else SS while e S S L S a ;I1: S SI2: S ife S else SI3: S while e SI4:
28、 S L L S L SL S if e S else SS while e S S L S a ; I5: S a; I6: S if e S else S S if e S else SS while e S S L S a ; I7: S while e S S if e S else SS while e S S L S a ; I8: S L I9: L S L SL L SL L S S if e S else SS while e S S L S a ; I10: S a ; I11: S if e S else SI12: S while e S I13: S L I14: S
29、 SL I15: S if e S else S S if e S else SS while e S S L S a ; I16: S if e S else S 構造文法G中非終結符的FOLLOW集如下:FOLLOW(S) = # S if e S else S得FOLLOW(S) = else S L 得FOLLOW(L) = 3) S S 得FOLLOW(S) = else , # L S 因為FIRST(S) = ,所以FOLLOW(S) = else , #, 在()項目規(guī)范簇中,只有9有“移進歸約”沖突,L SL SL因為FOLLOW(L) FIRST(L) = 所以可以用方法解
30、決以上沖突,最后我們得到的分析表如下:ACTIONGOTO ifElsewhilea;e#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static int action2011=/* 0 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 1, -1,/* 1 */ -1, -1, -1, -1, -1, -1, -1, -1,ACC, -1, -1,/* 2 */
31、 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1,/* 3 */ -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1,/* 4 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 9, 8,/* 5 */ -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1,/* 6 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 11, -1,/* 7 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 12, -1,/* 8 */ -1, -1, -
32、1, -1, 13, -1, -1, -1, -1, -1, -1,/* 9 */ 2, -1, 3, 4,105, 5, -1, -1, -1, 9, 14,/* 10*/ -1,104, -1, -1,104, -1, -1, -1,104, -1, -1,/* 11*/ -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 12*/ -1,102, -1, -1,102, -1, -1, -1,102, -1, -1,/* 13*/ -1,103, -1, -1,103, -1, -1, -1,103, -1, -1,/* 14*/ -1, -1,
33、-1, -1,106, -1, -1, -1, -1, -1, -1,/* 15*/ 2, -1, 3, 4, -1, 5, -1, -1, -1, 16, -1,/* 16*/ -1,101, -1, -1,101, -1, -1, -1,101, -1, -1;其中,前 9 列為 action 值,后 2 列為 goto 值;016 表示 17 個移進狀態(tài)( 即 Si);-1表示出錯;ACC 表示分析成功;而 100106 對應 7 個歸約產生式:S SS if e S else SS while e SS L S a;L SL SL2. 算術表達式的 LR 分析表 2 設計如下:S EE
34、 E+EE E*EE (E)E i (過程略)ACTIONGOTOI+*()#E0S3S211S4S5ACC2S3S263R4R4R4R44S3S275S3S286S4S5S97R1R5R1R18R2R2R2R29R3R3R3R3static int action1107=/* 0 */ 3, -1, -1, 2, -1, -1, 1,/* 1 */ -1, 4, 5, -1, -1,ACC, -1,/* 2 */ 3, -1, -1, 2, -1, -1, 6,/* 3 */ -1,104,104, -1,104,104, -1,/* 4 */ 3, -1, -1, 2, -1, -1, 7
35、,/* 5 */ 3, -1, -1, 2, -1, -1, 8,/* 6 */ -1, 4, 5, -1, 9, -1, -1,/* 7 */ -1,101, 5, -1,101,101, -1,/* 8 */ -1,102,102, -1,102,102, -1,/* 9 */ -1,103,103, -1,103,103, -1;3.布爾表達式的 SLR 分析表3 設計如下:(過程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24
36、S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action21611=/* 0 */ 1, -1, 4, -1, 5, -1, -1, -1, 13, 7, 8,/* 1 */ 1, 2, -1,101, -1,101,101,101, -1, -1, -1,/* 2 */ 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 3 */ -1, -
37、1, -1,102, -1,102,102,102, -1, -1, -1,/* 4 */ 1, -1, 4, -1, 5, -1, -1, -1, 11, 7, 8,/* 5 */ 1, -1, 4, -1, 5, -1, -1, -1, 6, 7, 8,/* 6 */ -1, -1, -1,104, -1, 9, 10,104, -1, -1, -1,/* 7 */ 1, -1, 4, -1, 5, -1, -1, -1, 14, 7, 8,/* 8 */ 1, -1, 4, -1, 5, -1, -1, -1, 15, 7, 8,/* 9 */ 105, -1,105, -1,105,
38、-1, -1, -1, -1, -1, -1,/*10 */ 107, -1,107, -1,107, -1, -1, -1, -1, -1, -1,/*11 */ -1, -1, -1, 12, -1, 9, 10, -1, -1, -1, -1,/*12 */ -1, -1, -1,103, -1,103,103,103, -1, -1, -1,/*13 */ -1, -1, -1, -1, -1, 9, 10,ACC, -1, -1, -1,/*14 */ -1, -1, -1,106, -1, 9, 10,106, -1, -1, -1,/*15 */ -1, -1, -1,108,
39、-1, 9, 10,108, -1, -1, -1;LR 分析表控制語義加工的實現(xiàn):當掃描 LR 分析表的當前狀態(tài)為歸約狀態(tài)時,則在調用與該狀態(tài)對應的產生式進行歸約的同時,調用相應的語義子程序進行有關的翻譯工作?,F(xiàn)在對 LR 分析器的分析棧加以擴充,使得每個文法符號之后都跟著它的語義值。為了清晰起見,我們把這個棧的每一項看成由三部分組成:狀態(tài) state ,文法符號 syl 和語義值 val。編譯程序實現(xiàn)算術表達式、布爾表達式及程序語句的語義加工時,都是按這種狀態(tài)棧加工方式進行的。例如:( 5 + 3 ) * 6的分析過程序號STATEValsylinput10-#( 5 + 3 ) * 6
40、#202-#(5 + 3 ) * 6 #3023#(5+ 3 ) * 6 #4026-5#(E+ 3 ) * 6 #50264-5-#(E+3 ) * 6 #602643-5-#(E+3 ) * 6 #702647-5-3#(E+E) * 6 #8026-8#(E) * 6 #90269-8-#(E)* 6 #1001-8#E* 6 #11015-8-#E* 6 #120153-8-#E*6#130158-8-6#E*E#1401-48#E#15ACC在分析過程中,第(3)步操作后的狀態(tài)棧為 023,根據(jù)棧頂狀態(tài)“ 3”和現(xiàn)行輸入符號“ +”( input 欄字符串的第一個字符)查分析表 AC
41、TION3,+=R4,即按第(4)個產生式 En 來進行歸約;由于產生式右部僅含一項,故去掉狀態(tài)棧棧頂“3”;此時 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號 E 壓棧,最后得到第( 4)步的狀態(tài)。第( 7)步操作后也是如此,當前狀態(tài)棧為 02647,根據(jù)棧頂狀態(tài) 7 和現(xiàn)行輸入符號“ )”查分析表 ACTION7,)=R1,即按第(1)個產生式 EE1+E2進行歸約;由于產生式右部有三項,故去掉狀態(tài)棧棧頂?shù)?647 三項;此時 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號 E 壓棧,
42、最后得到第(8)步的狀態(tài)。三中間代碼生成器設計:布爾表達式 布爾表達式在程序語言中有兩個基本作用:一是用作控制語句( 如 if -else 或 while語句)的條件式;二是用于邏輯演算,計算邏輯值。布爾表達式是由布爾算符( &、| 、!)作用于布爾變量( 或常數(shù))或關系表達式而形成的。關系表達式的形式是 E1 rop E2,其中 rop 是關系符( 如或),E1和 E2是算術式。在這里,我們只考慮前面給定文法所產生的布爾表達式:BB &B | B | B | ! B | (B) | i rop i | i遵照我們的約定,布爾算符的優(yōu)先順序( 從高到低)為:!、&、|,并假定&和|都服從左結合
43、規(guī)則。所有關系符的優(yōu)先級都是相同的,而且高于任何布爾算符,低于任何算術算符,關系算符不得結合。表達式的真、假出口的確定:考慮表達式 B1 | B2 ,若 B1為真,則立即知道 B 也為真;因此,B1的真出口也就是整個 B 的真出口。若 B1?為假,則 B2必須被計值,B2的第一個四元式就是 B1的假出口。當然,B2的真、假出口也就是整個 B的真、假出口。類似的考慮適用于對 B1 & B2的翻譯,我們將 B1 | B2和 B1 & B2 的翻譯用下圖表示,在自下而上的分析過程中,一個布爾式的真假出口往往不能在產生四元式的同時就填上。我們只好把這種未完成的四元式的地址( 編號)作為 B 的語義值暫
44、存起來,待到整個表達式的四元式產生完畢之后再來回填這個未填入的轉移目標。條件語句對條件語句 if e S1 else S2 中的布爾表達式 e,其作用僅在于控制對 S1和 S2的選擇。因此,作為轉移條件的布爾式e,我們可以賦予它兩種“ 出口”:一是“ 真”出T口,出向 S1;一是“ 假”出口,出向 S2。于是,e的代碼F條件語句可以翻譯成如圖的一般形式。非終結符 e 具有兩項語義值 e _TC 和e_FC,它們分別指出了尚待回填真、S2的代碼假出口的四元式串。e 的“ 真”出口只有在往回掃描到if時才能知道,而它圖 3-2 條件語句的代碼結構 的“ 假”出口則需到處理過 S1并且到達 else
45、 才能明確。這就是說,必須把 e_FC 的值傳下去,以便到達相應的 else時才進行回填。另外,當 S1語句執(zhí)行完時意味著整個 if-else 語句也已執(zhí)行完畢;因此,在 S1的編碼之后應產生一條無條件轉移指令。這條轉移指令將導致程序控制離開整個 if-else 語句。但是,在完成 S2的翻譯之前,這條無條件轉移指令的轉移目標是不知道的。甚至,在翻譯完 S2之后,這條轉移指令的轉移目標仍無法確定。這種情形是由于語句的嵌套性所引起的。例如下面的語句:if e1 if e2 S1 else S2 else S3 在 S1的代碼之后的那條無條件轉移指令不僅應跨越 S2而且應跨越 S3。這也就是說,轉
46、移目標的確定和語句所處的環(huán)境密切相關。條件循環(huán)語句條件循環(huán)語句 while e S 通常被翻譯成圖的代碼結構。布爾式 e 的“ 真”出口出向 S 代碼段的第一個四元式。緊接 S 代碼段之后應產生一條轉向測試 e 的無條件轉移指令。e 的“ 假”出口將導致程序控制離開整個 while 語句。e 的“ 假”出口目標即使在整個 while 語句翻譯完之后也未必明確。例如: if e1 while e2 S1 else S2這種情況仍是由于語句的嵌套性引起的。所以,我們只好把它作為語句的語義值 SCHAIN 暫留下來,以便在處理外層語句時再伺機回填。語法翻譯實現(xiàn)方法 將上述語法翻譯付諸實現(xiàn)過程中,我們
47、僅保留了算術表達式和布爾表達式翻譯的文法和語義動作;面對程序語句的翻譯,由于改造后含有較多的非終結符且語義動作又相對簡單,故仍恢復為改造之前的程序語句文法。由于總體上構造一個 SLR 分析表來實現(xiàn)語法分析及語義加工將使得所構造的 SLR 分析表過大,所以將其分為下面三部分處理:對算術表達式單獨處理,即為算術表達式構造一個 SLR 分析表,并將賦值語句A=E 與算術表達式歸為一類處理,處理之后的賦值語句僅看作為程序語句文法中的一個終結符 a。對布爾表達式也單獨處理,并為其構造一個 SLR 分析表,經 SLR 分析表處理后的布爾表達式看作為程序語句文法中的一個終結符 e。程序語句文法此時變?yōu)椋篠
48、if e S else S | while e S | L | a;L SL | S此時為程序語句構造相應的 SLR 分析表就簡單多了。前面的程序語句文法中所添加的非終結符是為了能及時回填有關四元式轉移目標而引入的,在取消了這些非終結符后又如何解決及時回填轉移目標的問題呢?我們采取的解決方法是增加兩個數(shù)組 labelmark 和 labeltemp 來分別記錄語句嵌套中每一層布爾表達式( 如果有的話)e 的首地址以及每一層else( 如果有的話)之前的四元式地址( 即無條件轉出此層 if 語句的四元式)。也即,對程序語句的翻譯來說:在處理完布爾表達式 e 后,回填 if 或 while 語句的真值鏈;在歸約完每一個語句 S 之后檢查符號棧,看在 S 之前的文法符號是否 if 或 while,若是則回填假值鏈( 假值入口為語句 S 所對應的四元式序列之后;對 if 語句,此時已在該序列之后加入了一條無條件轉移的四元式);在 if 語句中,else 前面要加入一個無條件轉移的四元式轉向 if 語句末尾;在 while語句尾要有一個無條件轉移四元式轉向 while 語句開頭。四數(shù)據(jù)結構說明 編譯程序中涉及到的數(shù)據(jù)結構說明如下:char ch=0; /*從字符緩沖區(qū)中讀取當前字符*/int count=0; /*詞法分析結果緩沖區(qū)計數(shù)器*/static char spelling10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流倉儲智能分揀系統(tǒng)數(shù)據(jù)接口授權與租賃合同
- 新能源技術轉化及投資合作框架
- 金融資產打包轉讓及風險管理合作協(xié)議
- 工業(yè)廢氣凈化設施驗收質量評估及標準完善協(xié)議
- 電子商業(yè)領域知識產權保護合作協(xié)議
- 共有產權房代持變更及產權轉移手續(xù)合同
- 《夫妻婚姻存續(xù)期間忠誠責任與共同生活責任協(xié)議》
- 航空設備質保期內檢修與適航性保障協(xié)議
- 醫(yī)學研究成果數(shù)據(jù)保密與知識產權保護合同
- DB42-T 2027-2023 野生早櫻播種育苗技術規(guī)程
- 《如何閱讀文獻》課件
- 本科《中醫(yī)美容學》教學大綱
- 2022年俄烏沖突戰(zhàn)爭PPT
- 機柜間主體施工方案
- 盂蘭盆供簡易儀軌
- 2019年上海市嘉定區(qū)高考英語一模試卷
- GB/T 3608-2008高處作業(yè)分級
- 2022年保德縣城污水處理有限公司招聘筆試試題及答案解析
- 薩提亞模式家庭治療課件
- 社會語言學 語言的性別、年齡變異課件
- 商業(yè)銀行押品風險排查報告
評論
0/150
提交評論