系統(tǒng)調(diào)優(yōu)性能測(cè)試報(bào)告_第1頁(yè)
系統(tǒng)調(diào)優(yōu)性能測(cè)試報(bào)告_第2頁(yè)
系統(tǒng)調(diào)優(yōu)性能測(cè)試報(bào)告_第3頁(yè)
系統(tǒng)調(diào)優(yōu)性能測(cè)試報(bào)告_第4頁(yè)
系統(tǒng)調(diào)優(yōu)性能測(cè)試報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 壓力測(cè)試報(bào)告XXXXX項(xiàng)目壓力測(cè)試報(bào)告2015-10-16XXXXXX技術(shù)有限公司文檔信息項(xiàng)目名稱XX系統(tǒng)個(gè)人系統(tǒng)優(yōu)化項(xiàng)目項(xiàng)目負(fù)責(zé)人文檔名稱壓力測(cè)試報(bào)告批復(fù)信息負(fù)責(zé)人日期意見(jiàn)擬制審核批準(zhǔn)版本記錄日期作者版本變更說(shuō)明1.0簡(jiǎn)介文檔目的本測(cè)試報(bào)告為性能對(duì)比測(cè)試報(bào)告,目的在于總結(jié)測(cè)試的工作進(jìn)展情況并分析測(cè)試結(jié)果,描述本階段測(cè)試是否達(dá)到調(diào)優(yōu)預(yù)期目標(biāo),符合需要要求。面向人員本文檔主要面向XX系統(tǒng)用戶、測(cè)試人員、開(kāi)發(fā)人員、項(xiàng)目管理人員和需要閱讀本報(bào)告的相關(guān)領(lǐng)導(dǎo)。參考文檔術(shù)語(yǔ)1.每秒事務(wù)數(shù)(TPS):是指每秒鐘完成的事務(wù)數(shù),事務(wù)是事先在腳本中定義的統(tǒng)計(jì)單元;2.事務(wù)平均響應(yīng)時(shí)間(ART):響應(yīng)時(shí)間一般反映

2、了在并發(fā)情況下,客戶端從提交請(qǐng)求到接受到應(yīng)答所經(jīng)歷的時(shí)間;3.資源利用率:是指在不影響系統(tǒng)正常運(yùn)行的情況下各服務(wù)器的CPU、內(nèi)存等硬件資源的占用情況;4.最大并發(fā)用戶數(shù):系統(tǒng)所能承受的最大并發(fā)用戶數(shù);5.思考時(shí)間(Thinktime):用于模擬實(shí)際用戶在不同操作之間等待的時(shí)間。例如,當(dāng)用戶收到來(lái)自服務(wù)器的數(shù)據(jù)時(shí),可能要等待幾秒鐘查看數(shù)據(jù),然后做出響應(yīng),這種延時(shí)就稱為“思考時(shí)間”。第一輪測(cè)試目標(biāo)根據(jù)項(xiàng)目情況,本次測(cè)試的目的主要是解決XX系統(tǒng)個(gè)人系統(tǒng)登錄和理財(cái)交易的處理能力達(dá)到客戶正常使用要求,根據(jù)測(cè)試結(jié)果評(píng)估系統(tǒng)性能,為生產(chǎn)運(yùn)行提供參考。分析目前系統(tǒng)登錄與理財(cái)?shù)奶幚砟芰?;提高登錄和理?cái)交易處理能

3、力,達(dá)到客戶流暢使用的目的;第二輪測(cè)試安排對(duì)整體系統(tǒng)運(yùn)行環(huán)境、系統(tǒng)自身交易功能進(jìn)行全面分析。通過(guò)壓力測(cè)試手段優(yōu)化系統(tǒng),提高運(yùn)行效率,并給出未來(lái)三到五年資源配置計(jì)劃,制定后續(xù)保障機(jī)制。計(jì)劃從十月十九日開(kāi)始方案討論。測(cè)試概況系統(tǒng)測(cè)試路徑壓力測(cè)試機(jī)web服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)擋板。測(cè)試環(huán)境測(cè)試資源類型用途服務(wù)器硬件壓力機(jī)loadrunner壓力機(jī)2C ,2G應(yīng)用應(yīng)用服務(wù)器32C,256G一體機(jī)數(shù)據(jù)庫(kù)oracle 4C ,8G測(cè)試工具工具描述工具名稱訪問(wèn)主機(jī)工具SecureCRT 5.1.3/Xshell訪問(wèn)數(shù)據(jù)庫(kù)工具PL/SQL Developer文檔編輯工具M(jìn)icrosoft Office 201

4、3Oracle客戶端OracleClient性能測(cè)試工具LoadRunner11.0資源監(jiān)控nmon本次對(duì)比測(cè)試內(nèi)容針對(duì)登錄交易和登錄+我的理財(cái)交易,在優(yōu)化前后分別設(shè)置50、200個(gè)虛擬用戶,采用15秒加10人梯度加壓模式,持續(xù)執(zhí)行十分鐘壓力測(cè)試,采用5秒減10人梯度減壓模式。同時(shí)監(jiān)控?cái)?shù)據(jù)庫(kù)服務(wù)器與應(yīng)用服務(wù)器。并發(fā)優(yōu)化前優(yōu)化后50200測(cè)試數(shù)據(jù)基礎(chǔ)數(shù)據(jù)為了使壓力測(cè)試結(jié)果更具有參考性,本次系統(tǒng)系統(tǒng)性能測(cè)試數(shù)據(jù)主要來(lái)源于個(gè)人系統(tǒng)生產(chǎn)脫敏數(shù)據(jù)。測(cè)試策略本次性能測(cè)試對(duì)待測(cè)交易進(jìn)行單一場(chǎng)景測(cè)試、混合場(chǎng)景測(cè)試,測(cè)試執(zhí)行使用HP Loadrunner工具執(zhí)行,使用nmon、topas、loadrunner,

5、weblogic console進(jìn)行監(jiān)控,在測(cè)試過(guò)程中屏蔽思考時(shí)間的方式處理,分別對(duì)測(cè)試交易并發(fā)加壓,記錄TPS及響應(yīng)時(shí)間、數(shù)據(jù)庫(kù)性能參數(shù)、應(yīng)用服務(wù)器性能參數(shù)等數(shù)據(jù)。測(cè)試人員現(xiàn)場(chǎng)參與人員:差異本次性能測(cè)試和實(shí)際上線情況存在一定的差異,差異如下:軟件差異:本次測(cè)試的交易,開(kāi)發(fā)工程師為性能測(cè)試進(jìn)行了相應(yīng)的調(diào)整,和生產(chǎn)程序有略微區(qū)別。環(huán)境差異:本次測(cè)試是在測(cè)試環(huán)境,環(huán)境的配置與實(shí)際生產(chǎn)環(huán)境有差異。交易測(cè)試結(jié)果匯總以下為執(zhí)行的測(cè)試結(jié)果匯總,如下表所示:優(yōu)化情況場(chǎng)景前端性能指標(biāo)應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器VuserTPSTRT事物成功率CPUMemoryCPUMemory(秒)優(yōu)化前501.02344.761

6、00%-75.31%97.90%70.80%0.98657.278100%-72.37%97.30%71.1.%2000.35184.22720.1%-87.12%98.50%76%1.97284.96814.5%-84.32%89.70%80%優(yōu)化后5044.4870.934100%-75.60%79.10%70.70%68.3550.914100%-78.66%81.60%72.40%20041.6623.333100%-89.30%79.70%60.10%51.3613.065100%-97.60%82.50%89%混合交易壓測(cè)情況總結(jié):1、50用戶優(yōu)化前:50用戶并發(fā)執(zhí)行10分鐘,一共

7、完成1246筆事務(wù)交易,平均響應(yīng)時(shí)間在37.936秒。失敗為0筆。2、50用戶優(yōu)化后:50用戶并發(fā)執(zhí)行6分鐘,一共完成37113筆事務(wù)交易,平均響應(yīng)時(shí)間在1.334秒。失敗為0筆。3、200用戶優(yōu)化前:200用戶并發(fā)執(zhí)行10分鐘左右,一共完成877筆事務(wù)交易,平均響應(yīng)時(shí)間在166.666秒。失敗為5464筆。4、200用戶優(yōu)化后:200用戶并發(fā)執(zhí)行10分鐘,一共完成46927筆事務(wù)交易,平均響應(yīng)時(shí)間在4.605秒,失敗為0筆。單交易場(chǎng)景壓測(cè)情況總結(jié):1、50用戶優(yōu)化前:50用戶并發(fā)執(zhí)行13分鐘,一共完成800筆事務(wù)交易,平均響應(yīng)時(shí)間在43.884秒。失敗為0筆。2、50用戶優(yōu)化后:50用戶并發(fā)

8、執(zhí)行6分鐘,一共完成10373筆事務(wù)交易,平均響應(yīng)時(shí)間在0.96秒。失敗為0筆。3、200用戶優(yōu)化前:200用戶并發(fā)執(zhí)行13分鐘,一共完成275筆事務(wù)交易,平均響應(yīng)時(shí)間在136.354秒。失敗為518筆。4、200用戶優(yōu)化后:200用戶并發(fā)執(zhí)行13分鐘,一共完成32705筆事務(wù)交易,平均響應(yīng)時(shí)間在3.319秒。失敗為0筆。混合交易測(cè)試圖表優(yōu)化前50個(gè)用戶數(shù)結(jié)果概況已刪除,下同 從概況可以看出,50用戶并發(fā)執(zhí)行10分鐘,一共完成1246筆事務(wù)交易,平均響應(yīng)時(shí)間在37.936秒。失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值506.2527.80950TRT并發(fā)數(shù)最小值平均值最大值504.8293

9、7.27850.729TPS并發(fā)數(shù)最小值平均值最大值500.51.9723.626吞吐量 優(yōu)化后50并發(fā)數(shù)結(jié)果概況從概況可以看出,50用戶并發(fā)執(zhí)行6分鐘,一共完成37113筆事務(wù)交易,平均響應(yīng)時(shí)間在1.334秒。失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值50222494.7454185.875TRT復(fù)合交易中:并發(fā)數(shù)最小值平均值最大值500.1760.9141.39TPS復(fù)合交易中登錄的值:并發(fā)數(shù)最小值平均值最大值5030.7568.355104.875吞吐量并發(fā)數(shù)最小值平均值最大值50044620233.82588990381.875優(yōu)化前200用戶數(shù)結(jié)果概況從概況可以看出,200用戶并

10、發(fā)執(zhí)行10分鐘左右,一共完成877筆事務(wù)交易,平均響應(yīng)時(shí)間在166.666秒。失敗為5464筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值200048.877459.25TRT并發(fā)數(shù)最小值平均值最大值2001984.968117.988TPS并發(fā)數(shù)最小值平均值最大值20000.3839.563吞吐量并發(fā)數(shù)最小值平均值最大值20001542597.66420924068.375優(yōu)化后200用戶數(shù)結(jié)果概況從概況可以看出,200用戶并發(fā)執(zhí)行10分鐘,一共完成46927筆事務(wù)交易,平均響應(yīng)時(shí)間在4.605秒,失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值2001305.0631823.1362706.875T

11、RT并發(fā)數(shù)最小值平均值最大值2000.1493.0566.742TPS優(yōu)化后200用戶TPS:并發(fā)數(shù)最小值平均值最大值20036.31351.36177.436吞吐量并發(fā)數(shù)最小值平均值最大值20020097877.93833418796.41757827993.417單交易測(cè)試圖表優(yōu)化前50用戶登錄概況從概況可以看出,50用戶并發(fā)執(zhí)行13分鐘,一共完成800筆事務(wù)交易,平均響應(yīng)時(shí)間在43.884秒。失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值500.12518.41453.125吞吐量并發(fā)數(shù)最小值平均值最大值5003756798.02450488425TRT并發(fā)數(shù)最小值平均值最大值504.8

12、7544.48750.875TPS并發(fā)數(shù)最小值平均值最大值500.2030.9341.376優(yōu)化前200用戶登錄概況從概況可以看出,200用戶并發(fā)執(zhí)行13分鐘,一共完成275筆事務(wù)交易,平均響應(yīng)時(shí)間在136.354秒。失敗為518筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值2000749.924903.375吞吐量并發(fā)數(shù)最小值平均值最大值20003517939.257416439.688TRT并發(fā)數(shù)最小值平均值最大值2009.518184.227475.646TPS并發(fā)數(shù)最小值平均值最大值20000.351.125優(yōu)化后50用戶登錄概況從概況可以看出,50用戶并發(fā)執(zhí)行6分鐘,一共完成10373筆事務(wù)

13、交易,平均響應(yīng)時(shí)間在0.96秒。失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值50144800.761001.25吞吐量并發(fā)數(shù)最小值平均值最大值5003756798.0245048842.5TRT并發(fā)數(shù)最小值平均值最大值2000.2030.9341.376TPS并發(fā)數(shù)最小值平均值最大值2004.87544.48750.875優(yōu)化后200用戶登錄概況從概況可以看出,200用戶并發(fā)執(zhí)行13分鐘,一共完成32705筆事務(wù)交易,平均響應(yīng)時(shí)間在3.319秒。失敗為0筆。每秒點(diǎn)擊率并發(fā)數(shù)最小值平均值最大值20006.70628.313吞吐量并發(fā)數(shù)最小值平均值最大值200031659.424136500.5

14、TRT并發(fā)數(shù)最小值平均值最大值2000.2273.3335.986TPS并發(fā)數(shù)最小值平均值最大值200041.66250.438結(jié)論總結(jié):附錄資料:不需要的可以自行刪除C語(yǔ)言編譯器的設(shè)計(jì)與實(shí)現(xiàn) 我們?cè)O(shè)計(jì)的編譯程序涉及到編譯五個(gè)階段中的三個(gè),即詞法分析器、語(yǔ)法分析器和中間代碼生成器。編譯程序的輸出結(jié)果包括詞法分析后的二元式序列、變量名表、狀態(tài)棧分析過(guò)程顯示及四元式序列程序,整個(gè)編譯程序分為三部分:(1) 詞法分析部分(2) 語(yǔ)法分析處理及四元式生成部分 (3) 輸出顯示部分一詞法分析器設(shè)計(jì) 由于我們規(guī)定的程序語(yǔ)句中涉及單詞較少,故在詞法分析階段忽略了單詞輸入錯(cuò)誤的檢查,而將編譯程序的重點(diǎn)放在中間

15、代碼生成階段。詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。我們規(guī)定輸出的單詞符號(hào)格式為如下的二元式: (單詞種別,單詞自身的值)#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#define EA 12#define EO 13#define p

16、lus 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ù)說(shuō)明 讀取函數(shù) readline( )、readch( )詞法分析包含從源文件讀取字符的操作,但頻繁的讀文件操作會(huì)影響程序執(zhí)行效率,故實(shí)際上是從源程序文件” source.dat ”中讀取一行到輸入緩沖區(qū),而詞法分析過(guò)程中每次讀取一個(gè)字符時(shí)則是通

17、過(guò)執(zhí)行 readch( )從輸入緩沖區(qū)獲得的;若緩沖區(qū)已被讀空,則再執(zhí)行readline( )從 source.dat 中讀取下一行至輸入緩沖區(qū)。掃描函數(shù) scan( ) 掃描函數(shù) scan( )的功能是濾除多余空格并對(duì)主要單詞進(jìn)行分析處理,將分析得到的二元式存入二元式結(jié)果緩沖區(qū)。變量處理 find( )變量處理中首先把以字母開(kāi)頭的字母數(shù)字串存到 spelling 數(shù)組中,然后進(jìn)行識(shí)別。識(shí)別過(guò)程是先讓它與保留關(guān)鍵字表中的所有關(guān)鍵字進(jìn)行匹配,若獲得成功則說(shuō)明它為保留關(guān)鍵字,即將其內(nèi)碼值寫(xiě)入二元式結(jié)果緩沖區(qū);否則說(shuō)明其為變量,這時(shí)讓它與變量名表中的變量進(jìn)行匹配( 變量匹配函數(shù) find( ) ),

18、如果成功,則說(shuō)明該變量已存在并在二元式結(jié)果緩沖區(qū)中標(biāo)記為此變量( 值填為該變量在變量名表中的位置),否則將該變量登記到變量名表中,再將這個(gè)新變量存入二元式緩存數(shù)組中。數(shù)字識(shí)別 number( ) 數(shù)字識(shí)別將識(shí)別出的數(shù)字填入二元式結(jié)果緩存數(shù)組。顯示函數(shù) 顯示函數(shù)的功能在屏幕上輸出詞法分析的結(jié)果( 即二元式序列程序),同時(shí)給出二元式個(gè)數(shù)及源程序行數(shù)統(tǒng)計(jì)。二語(yǔ)法分析器設(shè)計(jì) 語(yǔ)法分析器的核心是三張 SLR 分析表以及針對(duì)這三張 SLR 分析表進(jìn)行語(yǔ)義加工的語(yǔ)義動(dòng)作。編譯程序中語(yǔ)法分析處理及四元式生成部分主要是以二元式作為輸入,并通過(guò) SLR 分析表對(duì)語(yǔ)法分析處理過(guò)程進(jìn)行控制,使四元式翻譯的工作有條不紊

19、的進(jìn)行,同時(shí)識(shí)別語(yǔ)法分析中的語(yǔ)法錯(cuò)誤。在處理 if 和 while 語(yǔ)句時(shí),需要進(jìn)行真值或假值的拉鏈和返填工作,以便轉(zhuǎn)移目標(biāo)的正確填入。1. 控制語(yǔ)句的 SLR 分析表1 設(shè)計(jì)過(guò)程如下: 將擴(kuò)展文法GS S1)S if e S else S2)S while e S3)S L 4)S a;5)L S6)L SL用_CLOSURE方法構(gòu)造LR(0)項(xiàng)目規(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: S L L S L SL S if e S else SS wh

20、ile 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 SL I15: S if e S else S S if e S

21、 else SS while e S S L S a ; I16: S if e S else S 構(gòu)造文法G中非終結(jié)符的FOLLOW集如下:FOLLOW(S) = # S if e S else S得FOLLOW(S) = else S L 得FOLLOW(L) = 3) S S 得FOLLOW(S) = else , # L S 因?yàn)镕IRST(S) = ,所以FOLLOW(S) = else , #, 在()項(xiàng)目規(guī)范簇中,只有9有“移進(jìn)歸約”沖突,L SL SL因?yàn)镕OLLOW(L) FIRST(L) = 所以可以用方法解決以上沖突,最后我們得到的分析表如下:ACTIONGOTO ifE

22、lsewhilea;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 */ -1, -1, -1, -1, -1, -1, -1, 6, -

23、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, -1, -1, 13, -1, -1, -1, -1, -1, -1

24、,/* 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, -1, -1,106, -1, -1, -1, -1, -1, -

25、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 個(gè)移進(jìn)狀態(tài)( 即 Si);-1表示出錯(cuò);ACC 表示分析成功;而 100106 對(duì)應(yīng) 7 個(gè)歸約產(chǎn)生式:S SS if e S else SS while e SS L S a;L SL SL2. 算術(shù)表達(dá)式的 LR 分析表 2 設(shè)計(jì)如下:S EE E+EE E*EE (E)E i (過(guò)程略)ACTIONGOTO

26、I+*()#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,/* 5 */ 3, -1, -1, 2, -1, -1, 8,

27、/* 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.布爾表達(dá)式的 SLR 分析表3 設(shè)計(jì)如下:(過(guò)程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1

28、S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static 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, -1, -1,102, -1,102,102,102, -1, -1

29、, -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, -1, -1, -1, -1, -1, -1,/*10 */ 10

30、7, -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, -1, 9, 10,108, -1, -1, -1;LR 分析表控

31、制語(yǔ)義加工的實(shí)現(xiàn):當(dāng)掃描 LR 分析表的當(dāng)前狀態(tài)為歸約狀態(tài)時(shí),則在調(diào)用與該狀態(tài)對(duì)應(yīng)的產(chǎn)生式進(jìn)行歸約的同時(shí),調(diào)用相應(yīng)的語(yǔ)義子程序進(jìn)行有關(guān)的翻譯工作。現(xiàn)在對(duì) LR 分析器的分析棧加以擴(kuò)充,使得每個(gè)文法符號(hào)之后都跟著它的語(yǔ)義值。為了清晰起見(jiàn),我們把這個(gè)棧的每一項(xiàng)看成由三部分組成:狀態(tài) state ,文法符號(hào) syl 和語(yǔ)義值 val。編譯程序?qū)崿F(xiàn)算術(shù)表達(dá)式、布爾表達(dá)式及程序語(yǔ)句的語(yǔ)義加工時(shí),都是按這種狀態(tài)棧加工方式進(jìn)行的。例如:( 5 + 3 ) * 6的分析過(guò)程序號(hào)STATEValsylinput10-#( 5 + 3 ) * 6 #202-#(5 + 3 ) * 6 #3023-#(5+ 3 )

32、 * 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在分析過(guò)程中,第(3)步操作后的狀態(tài)棧為 023,根據(jù)棧頂狀態(tài)“ 3”和現(xiàn)行輸入符號(hào)“ +”( input 欄字符串的第一個(gè)字符)查分析表 ACTION3,+=R4,即按第(4)個(gè)產(chǎn)生式 En 來(lái)進(jìn)行歸約;由

33、于產(chǎn)生式右部?jī)H含一項(xiàng),故去掉狀態(tài)棧棧頂“3”;此時(shí) 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號(hào) E 壓棧,最后得到第( 4)步的狀態(tài)。第( 7)步操作后也是如此,當(dāng)前狀態(tài)棧為 02647,根據(jù)棧頂狀態(tài) 7 和現(xiàn)行輸入符號(hào)“ )”查分析表 ACTION7,)=R1,即按第(1)個(gè)產(chǎn)生式 EE1+E2進(jìn)行歸約;由于產(chǎn)生式右部有三項(xiàng),故去掉狀態(tài)棧棧頂?shù)?647 三項(xiàng);此時(shí) 2 變?yōu)樾碌臈m敔顟B(tài),再查( 2,E)的下一狀態(tài) s:GOTO2,E=6,即將狀態(tài) 6 和文法符號(hào) E 壓棧,最后得到第(8)步的狀態(tài)。三中間代碼生成器設(shè)計(jì):布爾表達(dá)式 布爾

34、表達(dá)式在程序語(yǔ)言中有兩個(gè)基本作用:一是用作控制語(yǔ)句( 如 if -else 或 while語(yǔ)句)的條件式;二是用于邏輯演算,計(jì)算邏輯值。布爾表達(dá)式是由布爾算符( &、| 、?。┳饔糜诓紶栕兞浚?或常數(shù))或關(guān)系表達(dá)式而形成的。關(guān)系表達(dá)式的形式是 E1 rop E2,其中 rop 是關(guān)系符( 如或),E1和 E2是算術(shù)式。在這里,我們只考慮前面給定文法所產(chǎn)生的布爾表達(dá)式:BB &B | B | B | ! B | (B) | i rop i | i遵照我們的約定,布爾算符的優(yōu)先順序( 從高到低)為:!、&、|,并假定&和|都服從左結(jié)合規(guī)則。所有關(guān)系符的優(yōu)先級(jí)都是相同的,而且高于任何布爾算符,低于任

35、何算術(shù)算符,關(guān)系算符不得結(jié)合。表達(dá)式的真、假出口的確定:考慮表達(dá)式 B1 | B2 ,若 B1為真,則立即知道 B 也為真;因此,B1的真出口也就是整個(gè) B 的真出口。若 B1?為假,則 B2必須被計(jì)值,B2的第一個(gè)四元式就是 B1的假出口。當(dāng)然,B2的真、假出口也就是整個(gè) B的真、假出口。類似的考慮適用于對(duì) B1 & B2的翻譯,我們將 B1 | B2和 B1 & B2 的翻譯用下圖表示,在自下而上的分析過(guò)程中,一個(gè)布爾式的真假出口往往不能在產(chǎn)生四元式的同時(shí)就填上。我們只好把這種未完成的四元式的地址( 編號(hào))作為 B 的語(yǔ)義值暫存起來(lái),待到整個(gè)表達(dá)式的四元式產(chǎn)生完畢之后再來(lái)回填這個(gè)未填入的轉(zhuǎn)

36、移目標(biāo)。條件語(yǔ)句對(duì)條件語(yǔ)句 if e S1 else S2 中的布爾表達(dá)式 e,其作用僅在于控制對(duì) S1和 S2的選擇。因此,作為轉(zhuǎn)移條件的布爾式e,我們可以賦予它兩種“ 出口”:一是“ 真”出T口,出向 S1;一是“ 假”出口,出向 S2。于是,e的代碼F條件語(yǔ)句可以翻譯成如圖的一般形式。非終結(jié)符 e 具有兩項(xiàng)語(yǔ)義值 e _TC 和e_FC,它們分別指出了尚待回填真、S2的代碼假出口的四元式串。e 的“ 真”出口只有在往回掃描到if時(shí)才能知道,而它圖 3-2 條件語(yǔ)句的代碼結(jié)構(gòu) 的“ 假”出口則需到處理過(guò) S1并且到達(dá) else 才能明確。這就是說(shuō),必須把 e_FC 的值傳下去,以便到達(dá)相應(yīng)

37、的 else時(shí)才進(jìn)行回填。另外,當(dāng) S1語(yǔ)句執(zhí)行完時(shí)意味著整個(gè) if-else 語(yǔ)句也已執(zhí)行完畢;因此,在 S1的編碼之后應(yīng)產(chǎn)生一條無(wú)條件轉(zhuǎn)移指令。這條轉(zhuǎn)移指令將導(dǎo)致程序控制離開(kāi)整個(gè) if-else 語(yǔ)句。但是,在完成 S2的翻譯之前,這條無(wú)條件轉(zhuǎn)移指令的轉(zhuǎn)移目標(biāo)是不知道的。甚至,在翻譯完 S2之后,這條轉(zhuǎn)移指令的轉(zhuǎn)移目標(biāo)仍無(wú)法確定。這種情形是由于語(yǔ)句的嵌套性所引起的。例如下面的語(yǔ)句:if e1 if e2 S1 else S2 else S3 在 S1的代碼之后的那條無(wú)條件轉(zhuǎn)移指令不僅應(yīng)跨越 S2而且應(yīng)跨越 S3。這也就是說(shuō),轉(zhuǎn)移目標(biāo)的確定和語(yǔ)句所處的環(huán)境密切相關(guān)。條件循環(huán)語(yǔ)句條件循環(huán)語(yǔ)句

38、while e S 通常被翻譯成圖的代碼結(jié)構(gòu)。布爾式 e 的“ 真”出口出向 S 代碼段的第一個(gè)四元式。緊接 S 代碼段之后應(yīng)產(chǎn)生一條轉(zhuǎn)向測(cè)試 e 的無(wú)條件轉(zhuǎn)移指令。e 的“ 假”出口將導(dǎo)致程序控制離開(kāi)整個(gè) while 語(yǔ)句。e 的“ 假”出口目標(biāo)即使在整個(gè) while 語(yǔ)句翻譯完之后也未必明確。例如: if e1 while e2 S1 else S2這種情況仍是由于語(yǔ)句的嵌套性引起的。所以,我們只好把它作為語(yǔ)句的語(yǔ)義值 SCHAIN 暫留下來(lái),以便在處理外層語(yǔ)句時(shí)再伺機(jī)回填。語(yǔ)法翻譯實(shí)現(xiàn)方法 將上述語(yǔ)法翻譯付諸實(shí)現(xiàn)過(guò)程中,我們僅保留了算術(shù)表達(dá)式和布爾表達(dá)式翻譯的文法和語(yǔ)義動(dòng)作;面對(duì)程序語(yǔ)句

39、的翻譯,由于改造后含有較多的非終結(jié)符且語(yǔ)義動(dòng)作又相對(duì)簡(jiǎn)單,故仍恢復(fù)為改造之前的程序語(yǔ)句文法。由于總體上構(gòu)造一個(gè) SLR 分析表來(lái)實(shí)現(xiàn)語(yǔ)法分析及語(yǔ)義加工將使得所構(gòu)造的 SLR 分析表過(guò)大,所以將其分為下面三部分處理:對(duì)算術(shù)表達(dá)式單獨(dú)處理,即為算術(shù)表達(dá)式構(gòu)造一個(gè) SLR 分析表,并將賦值語(yǔ)句A=E 與算術(shù)表達(dá)式歸為一類處理,處理之后的賦值語(yǔ)句僅看作為程序語(yǔ)句文法中的一個(gè)終結(jié)符 a。對(duì)布爾表達(dá)式也單獨(dú)處理,并為其構(gòu)造一個(gè) SLR 分析表,經(jīng) SLR 分析表處理后的布爾表達(dá)式看作為程序語(yǔ)句文法中的一個(gè)終結(jié)符 e。程序語(yǔ)句文法此時(shí)變?yōu)椋篠 if e S else S | while e S | L |

40、a;L SL | S此時(shí)為程序語(yǔ)句構(gòu)造相應(yīng)的 SLR 分析表就簡(jiǎn)單多了。前面的程序語(yǔ)句文法中所添加的非終結(jié)符是為了能及時(shí)回填有關(guān)四元式轉(zhuǎn)移目標(biāo)而引入的,在取消了這些非終結(jié)符后又如何解決及時(shí)回填轉(zhuǎn)移目標(biāo)的問(wèn)題呢?我們采取的解決方法是增加兩個(gè)數(shù)組 labelmark 和 labeltemp 來(lái)分別記錄語(yǔ)句嵌套中每一層布爾表達(dá)式( 如果有的話)e 的首地址以及每一層else( 如果有的話)之前的四元式地址( 即無(wú)條件轉(zhuǎn)出此層 if 語(yǔ)句的四元式)。也即,對(duì)程序語(yǔ)句的翻譯來(lái)說(shuō):在處理完布爾表達(dá)式 e 后,回填 if 或 while 語(yǔ)句的真值鏈;在歸約完每一個(gè)語(yǔ)句 S 之后檢查符號(hào)棧,看在 S 之前的

41、文法符號(hào)是否 if 或 while,若是則回填假值鏈( 假值入口為語(yǔ)句 S 所對(duì)應(yīng)的四元式序列之后;對(duì) if 語(yǔ)句,此時(shí)已在該序列之后加入了一條無(wú)條件轉(zhuǎn)移的四元式);在 if 語(yǔ)句中,else 前面要加入一個(gè)無(wú)條件轉(zhuǎn)移的四元式轉(zhuǎn)向 if 語(yǔ)句末尾;在 while語(yǔ)句尾要有一個(gè)無(wú)條件轉(zhuǎn)移四元式轉(zhuǎn)向 while 語(yǔ)句開(kāi)頭。四數(shù)據(jù)結(jié)構(gòu)說(shuō)明 編譯程序中涉及到的數(shù)據(jù)結(jié)構(gòu)說(shuō)明如下:char ch=0; /*從字符緩沖區(qū)中讀取當(dāng)前字符*/int count=0; /*詞法分析結(jié)果緩沖區(qū)計(jì)數(shù)器*/static char spelling10= ; /*存放識(shí)別的字*/static char line81= ; /*一行字符緩沖區(qū)( 最多 80 個(gè)字符)*/char *pline; /*字符緩沖區(qū)指針*/static char ntab110010; /*變量名表:共100項(xiàng),每項(xiàng)長(zhǎng)度為10*/struct ntab int tc; /*真值*/ int fc; /*假值*/ ntab2200; /*在布爾表達(dá)式 ) 中保存有關(guān)布爾變量的真、假值*/int label=0; /*指向 ntab2 的指針*/struct

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論