freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[工學]編譯原理課程設計報告-wenkub

2023-04-26 22:24:07 本頁面
 

【正文】 出抽象語法樹。 }\\\^([AZ]||[|\|]|\^|_) {char temp=yytext().charAt(2)。 if(d=0amp。}\\\\|\\ {(39。)。\t39。具體代碼如下:STRING{\ {yybegin(YYINITIAL)。而后對轉義字符進行處理。當讀入/* 時進入此狀態(tài)并設置一個計數(shù)器count。s Manual》。 Tiger編譯器模塊流程圖 項目時間安排本學期第十周開始啟動該項目,第十四周完成詞法分析和語法分析(本項目的前兩個模塊),第十七周完成至寄存器分配之前,第十八周完成工程及課程設計文檔,第十九周提交檢查。 Tiger語言規(guī)范詳見《Tiger Language Reference Manual》。 課程設計所用語言JAVA 課程設計參考“虎書”《Modern piler implementation in JAVA,1st edtion》 實驗環(huán)境(工具)Java 開發(fā)環(huán)境: Eclipse詞法分析器: JFlex語法分析器: CUPMIPS模擬器:PCSPIM 設計模塊編譯器的設計涉及到很多方面,可分為多個模塊,從前端(詞法分析)到后端(目標代碼生成)依次完成。 項目完成情況基本上符合原計劃,現(xiàn)已完成最終的目標代碼生成,可以將較復雜的tiger程序編譯MIPS匯編文件,并在模擬器上正確運行。由于本工程早期是在Linux下進行的,所以我下載的是tar格式的壓縮包,再執(zhí)行以下指令進行安裝:tar C /zzx1989/ xvzf ln s /zzx1989/JFlex/bin/jflex /usr/bin/jflex運行是運行如下指令:jflex 。繼續(xù)讀入若讀入/*則計數(shù)器count++;若讀入/*則count;并判斷當前count值,若等于0則退出COMMENT狀態(tài)。典型如\n \t \ \\ 則直接進行轉義處理。return tok(,())。)。}\\\ {(39。\\39。amp。 int num=(int)temp64。語法分析的中心思想依然是有窮自動機。3 Symbol包Symbol包中封裝了符號()和符號表()。() 在當前符號表中新建一個子符號表。 Absyn包Absyn包中包含了抽象語法樹的結點。 詳見附錄B。precedence right DO, ELSE, THEN。precedence left LPAREN。precedence left UMINUS。特別的,將ELSE和THEN設置為又結合可以很好的解決ifelse二義性的問題。expr ::= ID:id LPAREN RPAREN {: RESULT= new CallExp(idleft,idright,sym(id),null)。 :}。 :}。檢查通過則交給接下來的中間代碼生成模塊產(chǎn)生中間代碼樹(IRTree)。VarEntry: 派生自Entry,用于普通變量LoopVarEntry: 派生自Entry,用于循環(huán)變量StdFuncEntry: 派生自Entry,用于庫函數(shù)FuncEntry: 派生自Entry,用于普通函數(shù)Env: 環(huán)境符號表, tEnv和vEnv。LoopEnv: 主要用于在分析時判斷是否處于循環(huán)當中,具體詳見本章的問題解決。 Type包類圖Type類的coerceTo函數(shù)描述了關于類型的強制轉換部分的信息: 除了nil類型可以賦值給record類型外,其它只能轉換到本身,且不能將nil賦值給nil。 Function a{ While(…){ Function b{ While(…){ … } …. xxxx } } }如果簡單的按處理嵌套注釋的方法,在xxxx初的loop值仍然大于零,意味著仍處于循環(huán)內(nèi)。外層的stack表示作用域,內(nèi)層的stack表示是否有循環(huán)。 類型的循環(huán)定義在Tiger語言中類型的循環(huán)定義是不被允許的,如下列語法:type a1=a2 type a2=a3 type a3=a4 type a4=a1是錯誤的。 if (b == null) any = true。 return any。AccessList 將Access串成鏈表。InReg 派生自Access,表示存放在寄存器中的變量。 Mips包和Frame包的類圖 Level類Level是用來描述靜態(tài)連接用的數(shù)據(jù)結構。 Tree包Tree包定義了中間樹的節(jié)點,這是一種抽象的機器語言,它無需太多地考慮機器特性的細節(jié)就可以對目標機的操作進行表達。Translate不直接生成樹的具體結點,而是先生成這些代理類,由它們通過方法unEx,unCx 或unNx來生成具體的結點。每個Frag都包含一個指向下一個Frag的指針,因此可以形成段鏈表。4個ProcEntryExit的執(zhí)行順序為:ProcEntryExit () 中調用ProcEntryExit1emitProc中 () 中調用ProcEntryExit3這樣最終生成的關于函數(shù)體的匯編代碼為:1) 設置函數(shù)體標號2) 計算 $SP, 分配幀空間3) 保存原 $FP4) 計算新 $FP ($fp=$sp幀空間+4 bytes)5) 保存 $RA6) 保存 CalleeSaved 寄存器7) 保存參數(shù) $A0~$A38) [函數(shù)體]9) 將函數(shù)體返回值寫入 $RV10) 恢復 CalleeSaved 寄存器11) 恢復 $RA12) 恢復 $FP13) 恢復 $SP, 將$SP 加上相應的幀空間14) 跳轉到返回地址其中1,2,13,14由ProcEntryExit3完成,9由ProcEntryExit完成,其余由ProcEntryExit3完成。OPER類中包含匯編語言指令assem,一個操作數(shù)寄存器列表src 和一系列的結果寄存器dst,這些寄存器列表都可以是空的。MOVE與OPER 很接近,但MOVE必須進行數(shù)據(jù)轉換。Instr是與特定的機器無關的。圖 MOVE為根時的六種可能情形其中d標記數(shù)據(jù)寄存器,a標記地址寄存器。 if (() amp。 (((BINOP) ).right)) { Temp t1 = munchExp(src)。amp。 Temp t2 = munchExp(((BINOP) ).right)。 } else { Temp t1 = munchExp(src)。 } else { Temp t1 = munchExp(src)。大致的步驟為:根據(jù)匯編指令生成流圖 活性分析 生成干擾圖 – 根據(jù)干擾圖分配寄存器(著色算法)7 流圖的生成,在這個類中每個結點代表一個匯編指令,邊為可能的控制轉移。 for (InstrList i = instrs。 if ( instanceof LABEL) (((LABEL) ).label, node)。 if (next == null) { if ( != null) addEdge(, )。 } } 活性分析對于流圖中的每個結點,用下面的結構RegAlloc::NodeInfo來描述它的結點信息:class NodeInfo { NodeInfo(TempList u, TempList d) { for (TempList t = u。 t != null。 SetTemp use = new HashSetTemp()。最后將生成的活躍變量記錄到活躍變量表中。 for (NodeList node = ()。 ()。 SetTemp out1 = new HashSetTemp()。 ()。 for (NodeList node = ()。 while (()) list = new TempList((Temp) (), list)。生成干擾圖的算法如下:a. 在任何定義變量a且沒有轉移的指令中,其中非活躍變量包括b1,b2…bj,添加干擾邊(a,b1),…(a,bj)。 for (NodeList node = ()。 t = ) ()。 } IteratorTemp i = ()。 node = ) for (TempList t = ()。 t1 = ) if ( != amp。 flowGraph .use().head == )) { addEdge(tnode(), tnode())。這是一個NPC問題。并刪除那些不在堆棧中的結點指向這個結點的邊。 (這里不進行額外處理了)c. 接下來為那n 個還沒有分配寄存器的結點分配寄存器 (它們處在棧頂)。 void color() { int number = 0。 Temp temp = ()。 for (NodeList adj = ()。 i number。 n != null。 if (max num amp。 } } if (node == null) { (() : register spills.)。 adj != null。 public Color color。 InterferenceGraph interGraph = new Liveness(flowGraph)。8 整個編譯器的入口。單擊Go按鈕,會彈出對話框詢問程序的開始位置,這是由于在Main中生成匯編程序時是先將庫函數(shù)賦值到程序文件開頭的。當然,接下來還有幾個附錄要寫,文檔要打印,程序要刻光盤,明天(哦不是今天)下午還有答辯…但不管怎樣,這個堪稱史詩級的大作業(yè),這個歷時半個學期工程,上萬行的代碼,超過一萬字的實驗報告,終于走到尾聲了。import 。}private Token tok(int kind, String value) { return new StrToken( yyline, yycolumn,kind, value)。Yylex( s, ErrorMsg e) { this(s)。}if {return tok()。}to {return tok()。}array {return tok()。}in {return tok()。}var {return tok()。}, {return tok()。} {return tok()。 {return tok()。} {return tok()。}: {return tok()。 {return tok()。}} {return tok()。}{IntegerLiteral} {return tok(,new Integer(yytext()))。}\\t {(39。\n39。)。} \\[:digit:][:digit:][:digit:] {int d=new Integer(yytext().substring(1,4))。 else err(The escape sequence +yytext()+is out of the range)。} \\({WhiteSpace}|{LineTerminator})+\\ {}.|\n {}}COMMENT{/* {mentcount++。} EOF {if(mentcount!=0)err(Unexpected end of ment)。import 。 Exp parseResult。 } public Grm(Lexer l, ErrorMsg err) { this()。scan with {: return ()。terminal COMMA, COLON, SEMICOLON, LPAREN, RPAREN, LBRACK, RBRACK, LBRACE, RBRACE, DOT, PLUS, MINUS, MUL, DIV, EQ, NE, LT, LE, GT, GE, AND, OR, ASSIGN, ARRAY, IF, THEN, ELSE, WHILE, FOR, TO, DO, LET, IN, END, OF, BREAK, NIL, FUNCTION, VAR, TYPE,UMINUS。non terminal Var lvalue。non terminal FieldList type_fields。precedence right FUNCTION,TYPE。precedence left OR。precedence left TIMES, DIVIDE。precedence left LPAREN。:}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。 :}。
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1