




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
編譯原理課程實驗報告實驗2:句法分析姓名云天嬌 院系 軟件學院 學號1113710311任課教師陳鄞指導教師陳鄞實驗地點軟件學院三樓機房實驗時間2013.11.6實驗課表現(xiàn)出勤、表現(xiàn)得分實驗報告得分實驗總分操作結(jié)果得分一、需求分析得分要求:采用至少一種語法分析技術(shù)(LL(1)、SLR(1)、LR(1)或LALR(1))對類高級語言中的基本語句(至少包括函數(shù)定義、變量說明、賦值、循環(huán)、分支等語句)進行語法分析。闡述句法分析系統(tǒng)所要完成的各個功能,并給出如下語言成分的文法描述?函數(shù)定義(或過程定義)?變量說明?賦值?表達式?循環(huán)?分支句法分析功能簡述:我的程序主要是對第一次實驗詞法分析之后得到的 list進行句法分析,首先有一個textArea來接收輸入的程序,然后會通過句法分析,在預測分析表中體現(xiàn)出單步執(zhí)行輸出棧中元素,以及每步所用的產(chǎn)生式。程序的輔助功能還有重置程序以及導入文件的功能。算法分析:主要的算法思想是,通過產(chǎn)生式求出每個終結(jié)符與非終結(jié)符的first集,然后在求出非終結(jié)符的follow集,再通過follow集和first集求出每個產(chǎn)生式的select集。然后再分析所接收到的字符,通過接收的字符,去select集中找到匹配的產(chǎn)生式,然后通過一系列對棧的操作,寫出預測分析表。文法產(chǎn)生式:<3>—<functions><functions>-*<functionXfunctions><funccions>-*^<funcciQn>—<cype><id><(xparan.ecezsx)><iunctlon_fcody><funccion>-t<VOID><ici><(xparamecersx)><function__fcody><rype>-<INT><rype>^<CHAR><rype>-<FLOAT><匕yp旦LONG〉<type>-*<DOUBLE><paraur.ecers>-*<cype><id><pararrLecer><parair.ecers>-*5<paraiTiecer r><cype><id><paraniecex><parairieter>-*C<function_body>-*<;><function_body>-*<block><blocte>—<{><define_st:Tftts><stmts><}><define_stmts>-*<define_stmtXdefine_stmts><define_scmcs>-*5<define_scmc>-*<cype><id><lnic><vaxs><;><inic>-t<=xexpression><vars>-*<z><id><init><vars><vars>—5<scmc>-*<expression><;>scmc>—<jump_scmc><3cmc>-t<iceracion__scmc><3rmc>^<3election__scmc><3tmc>-*<block_scmc>jump_3tmt>--<C0NTINUE><;>jvimp_3tmt>—<BREAK><:>Cjvimpstmt>-*<RETURN><iisnullexpressionX;>
得分三、詳細設(shè)計及實現(xiàn)得分要求:對如下工作進行展開描述核心數(shù)據(jù)結(jié)構(gòu)的設(shè)計主要功能函數(shù)說明程序核心部分的程序流程圖?核心數(shù)據(jù)結(jié)構(gòu)設(shè)計核心數(shù)據(jù)結(jié)構(gòu)是把實驗一詞法分析的結(jié)果存到一個list里,然后對自己所寫的產(chǎn)生式中的每一個符號求first集,follow集和select集,然后編寫一個函數(shù)來讀入你所輸入的符號,根據(jù)select集找到相應的產(chǎn)生式,然后逐步替換,最后將分析的結(jié)果輸出來。?主要功能函數(shù)說明publicvoidanalysis():將所有的產(chǎn)生式添加到Ulist里publicvoidgetFirst():求每一個符號的first集publicvoidgetFollow():publicvoidgetSelect():求每一個產(chǎn)生式的select集publicSymbolfindSymbol(Stringstr):判斷符號表中是否有這個符號publicList<Production>AnalysisTable(List<String>t):對棧的操作,如何判斷所需產(chǎn)生式publicbooleanisReadNull(Stringstr):判斷符號是否可多步推導為空
符號是是否號X為終結(jié)符號為空,式左部的first集中有右部符號的符號可以多步推導志位為true,證明所有first集都是程序核心部分的程序流程圖符號是是否號X為終結(jié)符號為空,式左部的first集中有右部符號的符號可以多步推導志位為true,證明所有first集都是程序核心部分的程序流程圖First集算法流程圖:是遍歷所有符號First(X)=X遍歷所有產(chǎn)生式遍歷產(chǎn)生式右部將右部符號的first集并入到左部非終結(jié)符的first集中,設(shè)定一個辨別更新的標志位,此結(jié)束遍歷右部符號first集是是明符st全了遍歷所有產(chǎn)生式讀取符號讀取符號為終結(jié)符號之后的符號多步推導號的follow集中有它之后符號的firsts.志位為true,說明所有follow都找Follow是是明符st全了遍歷所有產(chǎn)生式讀取符號讀取符號為終結(jié)符號之后的符號多步推導號的follow集中有它之后符號的firsts.志位為true,說明所有follow都找Follow集算法流程圖:是是設(shè)置標志位代表更新n?^H將first集加入到該符號的follow集中,圭市'至后7fcII 集將#加入到<S>的follow集中遍歷之后符號的first集遍歷該符號之后的符號遍歷產(chǎn)生式右部結(jié)束否是否否每個產(chǎn)生式右部的第一個符號是否為該產(chǎn)生式的select集中有符號的first集判斷該符號可多步推導為遍歷右部每個符號的first集遍歷該產(chǎn)生式右部的符號是Select否是否否每個產(chǎn)生式右部的第一個符號是否為該產(chǎn)生式的select集中有符號的first集判斷該符號可多步推導為遍歷右部每個符號的first集遍歷該產(chǎn)生式右部的符號是Select集算法流程圖:是開始將該產(chǎn)生式左部的follow集加入到該產(chǎn)生式的select集中將該符號的first集加入到該產(chǎn)生式的select集中將左部的follow集并入到該產(chǎn)生式的select集中遍歷所有產(chǎn)生式返回所需產(chǎn)生式流程圖:開始說明全部遍歷完,棧中沒
有符號了,結(jié)束找到select集中包含所輸入終結(jié)符的產(chǎn)生式將該產(chǎn)生式的右
部壓入棧四、實驗結(jié)果及分析 I得分要求:對實驗結(jié)果進行描述和分析,基本內(nèi)容包括:(1) 輸出該語法分析器的語法分析表(2) 針對一測試程序輸出其語法分析結(jié)果;(3) 輸出針對此測試程序?qū)恼Z法錯誤報告;(4) 對實驗結(jié)果進行分析。注:其中的測試樣例需先用已編寫的詞法分析程序進行處理。?主界面?分析結(jié)果源程序:intmain(inta,intbX源程序:intmain(inta,intbX分析推導過程所需產(chǎn)生式▲-?<functions><s>-><functions>-?<function><functions><functions>-><function><functions>-><type><id><(><parameters><)><function_bo(iy><functions><function>-><type><id><(><parameters><)><function_body>->v|NT><id><(><parameters><)><function_bo(iy><functions><type>-><INT>-?<INT><id><(><type><id><parametep><)><fundion_bo(iy><functions><parameters>-><type><id><parametep?-?<INT><id><(><INT><id><parameteR<)><function_body><functions><type>-><INT>-?<INT><id><(><INT><id><><type><id><parameteR<)><function_bo(iy><functions><parametep?-?<><type><id><parametep?-?<INT><id><(><INT><id><><INT><id><parametep><)><function_body><functions><type>-><INT>-?<INT><id><(><INT><id><,><INT><id><)><function_body><functions>vparameter>-?£-?<INT><id><(><INT><id><,><INT><id><)><block><functions><function_bo(iy>-><block>-?<INT><id><(><INT><id><,><INT><id><)><(><define_stmts><stmts><}><functions><block>-?<{><define_stmts><stmts><)>-?<INT><id><(><INT><id><,><INT><id><)><(><stmts><}><functions><define_stmts>-?<INT><id><(><INT><id><,><INT><id><)><(><stmt><stmts><}><functions><stmts>-><stmt><stmts>-?<INT><id><(><INT><id><,><INT><id><)><(><expression><;><stmts><}><functions><stmt>-><expression><;>-?<INT><id><(><INT><id><,><INT><id><)><(><value><operation><;><stmts><}><functions>〈expression〉-><value><operation>-?<INT><id><(><INT><id><,><INT><id><)><(><item><items><operation><;><stmts><}><functions><value>-><item><items>-?v|NT>vjd>v(>v|NT>vjd>v,>v|NT>vjd>v)>v{><factor><factors><items><operation><;><stmts><}><functio...<item>-xfactoR<factors>-?<INT><id><(><INT><id><,><INT><id><)><(><id><call_function><factors><items><operation><;><stmts>...<factoR-><id><call_function>-?<INT><id><(><INT><id><,><INT><id><)><(><id><factors><items><operation><;><stmts><}><functions><call_function>--?<INT><id><(><INT><id><,><INT><id><)><(><id><items><operation><;><stmts><}><functions><factors>--?<INT><id><(><INT><id><,><INT><id><)><(><id><operation><;><stmts><}><functions>〈items〉-?<INT><id><(><INT><id><,><INT><id><)><(><id><equal_op><value><;><stmts><}><functions><operation>-><equal_op><value>-?<INT><id><(><INT><id><,><INT><id><)><(><id><=><value><;><stmts><}><functions><equal_op>-?<=>-?<INT><id><(><INT><id><,><INT><id><)><(><id><=><item><items><;><stmts><}><functions><value>-><item><items>-?<INT><id><(><INT><id><,><INT><id><)><(><id><=><factoR<factors><items><;><stmts><}><functions><item>-xfactoR<factors>?測試程序intmain(inta,intb)(a=0;b=5;if(a<b)(returna;}else(returnb;}}?分步結(jié)果分析推導過程所需產(chǎn)生式-*<functions><s>^-<functions>-*-<function>〈functions〉<functions>-*-<function>〈functions〉-*<type><id><(>〈parameters〉<)><fundion_body>functions*<unction>-*<type><id><(>〈parameters〉<)><fundion_body>-*<INT><id><(>〈parameters〉<)><function_t>ody><functions><type>fv|NT>-?<1NT><id><(><type><id><parametep*<)><function_body>〈functions〉<parameters>-*-<type><id><parameter>-?<1NT><id><(><INT><id><parameten><)><function_body>〈functions〉<type>-><INT><1NT><id><(><INT><id><><type><id>〈parameter*<)><function_body><functions>〈parameter〉-*<><type><id>〈parameter*-?<INT><id><(><INT><id><,><INT><id><parameter><)><function_body><functions><type>-><INT>-?<1NT><id><(><INT><id><><INT><id><)><function_body><fundions><parameter>->^-*<INT><id><(><INT><id><><INT><id><)><block><functions><function_body>-*<block>-?<INT><id><(><INT><id><,><INT><id><)><(><define_stmts><stmts><}><functions><block>-><(><define_stmts><stmts><}>—v|NT>vid>v(>v|NT>vid>v,x|NT>vid>v)>v{>vstmts><}><functions><define_stmts>—Z-*<INT><id><(><INT><id><><INT><id><)><(><stmt><stmts><}><fundions><stmts>fvstmt><stmts>-?<INT><id><(><INT><id><><INT><id><)><(><expression><;><stmts><}><functions><stmt>-*-<expression><;>-xINTxidxCxINTxidx><INT><id><)><(><value><operation><;><stmts><}>〈functions〉〈expression〉-*<value><operation>-*<INT><id><(><INT><id><><INT><id><)><(><item><items><operation><;><stmts><}><functions><value>-*<item><items>-?v|NTAvid>v(>v|NTAvid>v,Av|NT>vidAv)Av{Avfador><fadors><items><operation><;><stmts><}>〈functions〉<item>-><factor><fadors>—v|NT>vid>v(>v|NT>vid>v,>v|NT>vid>v)>v{xid><call_function><factors><items><operation><;><stmts><}><functions><actor>—vid><call_fundion>-*<INT><id><(><INT><id><><INT><id><)><(><id><factors><items><operation><;><stmts><}><functions>vcaii_function>f(-?<INT><id><(><INT><id><><INT><id><)><(><id><it
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技中心如何影響全球經(jīng)濟發(fā)展格局
- 臥式設(shè)備水套更換施工方案
- 營口職業(yè)技術(shù)學院《建筑模型制作與工藝》2023-2024學年第二學期期末試卷
- 中北大學《普通生物化學綜合》2023-2024學年第二學期期末試卷
- 四川郵電職業(yè)技術(shù)學院《分析化學》2023-2024學年第二學期期末試卷
- 華中農(nóng)業(yè)大學《冶金工程與環(huán)境概論》2023-2024學年第二學期期末試卷
- 石家莊工商職業(yè)學院《現(xiàn)代電子總線技術(shù)》2023-2024學年第二學期期末試卷
- 濰坊工商職業(yè)學院《公路客運站建筑設(shè)計》2023-2024學年第二學期期末試卷
- 2025年幼兒園中班科學尋找空氣標準教案
- 四川西南航空職業(yè)學院《日本史專題》2023-2024學年第二學期期末試卷
- 三年級數(shù)學下冊期末測試卷及答案【可打印】
- 蘇教版小學語文上冊教學研究論文
- 片狀鋅粉行業(yè)分析!中國片狀鋅粉行業(yè)市場發(fā)展前景研究報告(2024版)
- 公鐵兩用牽引車市場發(fā)展預測和趨勢分析
- 兒童繪本故事《我的情緒小怪獸》
- 部編版六年級下冊道德與法治全冊教案
- 3.1 導數(shù)的概念 課件 《高等數(shù)學》
- 2024版《供電營業(yè)規(guī)則》學習考試題庫500題(含答案)
- 供貨送貨服務(wù)承諾書
- G -B- 43630-2023 塔式和機架式服務(wù)器能效限定值及能效等級(正式版)
- EPC項目質(zhì)量保證措施
評論
0/150
提交評論