日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

CS 2210編程代寫、Java程序語言代做

時間:2023-11-27  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



CS 2210 Programming Project (Part IV)
Code Generation
This project is intended to give you experience in writing a code generator as well as bring together
the various issues of code generation discussed in the text and in class.
Due date
The assignment is due December 9th, 2023, 11:59pm. This is the hard deadline and no extensions will be given for this project.
Project Summary
Your task is to write a code generator, the final phase of your compiler. It produces (target)
assembly code for the MIPS R2000 architecture. It takes as input the augmented AST and symbol
table produced by the previous phases of your compiler. The generated code will be executed using
SPIM S20, a simulator for the MIPS R2000.
Code generation will consist of assigning memory addresses for each variable used in the MINIJAVA program and translating subtrees of the AST (intermediate language representation) into
sequences of assembly instructions that perform the same task.
Code Generation
This is the only phase of your compiler which is machine dependent. Examples of assembly code
programs will be provided on the class webpage.
The important/interesting issues in generating code for MINI-JAVA are discussed in the following paragraphs. Please refer to chapter 7, 8 and class notes for further details on these issues,
You can make the following assumptions to simplify the project.
ˆ Code is generated for the intermediate instructions on a statement-by-statement basis without
taking into account the context of an intermediate instruction
ˆ code is generated for the intermediate instructions in the order that they occur within the
intermediate instruction sequence.
ˆ You may take advantage of any special instruction of the machine when choosing target
instructions for a given intermediate instruction.
ˆ You do not have to any fancy register allocation or optimization on your target code.
1
Computing Memory Addresses
Since address information has not been computed and entered into the symbol table by earlier
phases, the first task of the code generator is to compute the offsets of each variable name (both
global and local); that is, the address of each local data object and formal parameter within the
activation record for the block in which they are declared. This can be done by initializing a
variable offset at the start of each declaration section, and as each declaration is processed, the
current value of offset is entered as an attribute of that symbol, and offset is then incremented
by the total width of that data object (depending on its type).
The program execution begins with a method called main() being called. Since the language
has no way to initiate classes, all classes are instantiated when program execution begins. Thus,
all storage for all classes is allocated globally. The offsets of variables within classes should be
computed and stored as an attribute of the variable name, typically relative to the start of the class
or can just be relative to the start of the global storage.
For simplicity, declarations within a method donot contain any objects whose types are classes.
That is, local variables can only be of integer type or integer array type.
Call-by-value parameters will have a width dependent on the type of the parameter (remember
we are using only integer parameters), whereas call-by-reference parameters will have a width
equal to ONE word to store an address. The total activation record size of each method should be
computed at this time and entered in the symbol table as an attribute of the method name.
The machine architecture must be take into account when computing these widths, that is,
an integer in the MIPS processor is 4 bytes. Offsets of locals can be implemented as a negative
offset from the frame pointer while offsets of parameters can be positive from the frame pointer.
Thus, the computation of offsets of arguments and local variables can be done independently. This
information will be used upon every reference to the data object in addition to being used in the
allocation of storage for activation records.
Handling Structure Data Types
Storage for an array is allocated as a consecutive block of memory. Access to individual elements
of an array is handled by generating an address calculation using the base address of the array,
the index of the desired element, and the size of the elements. You are free to choose the layout of
elements of an array in your implementation (e.g., row major or column major order).
Simple Control Flow
Code for simple control statements, namely conditional and loops in MINI-JAVA, can be generated
according to the semantics of conventional programming languages using the compare and branch
instructions of the assembly language. Unique target labels will also have to be generated.
Method Invocation, Prologues, and Epilogues
Recursion in MINI-JAVA prevents the use of a static storage allocation strategy. However, the
language has no features that prevent the deallocation of activation records in a last-in-first-out
manner. That is, activation records containing data local to an execution of a method, actual
parameters, saved machine status, and other information needed to manage the activation of the
2
method can be stored on a run-time stack. The MIPS assembly language provides the subroutine
call mechanisms to manipulate the run-time user stack.
An activation record for a method is pushed onto the stack upon a call to that method, while
the activation record for the method is popped from the stack when execution of the method is
finished and control is to be returned to the caller. As MINI-JAVA does not allow dynamic classes
and arrays, the sizes of all activation records are known at compile time.
Method calls result in the generation of a calling sequence. Upon a call, an activation record for
the callee must be set up and control must be transferred to the callee after saving the appropriate
information in the activation record. For each method, the generated code sequence will consist of
a prologue, the code for the statements of the method, and the epilogue. Typically, the prologue
saves the registers upon a method call and allocates space on the stack for local variables, whereas
the epilogue consists of restoring the saved machine status and returning control to the point in the
caller immediately after the point of call. The handout on the MIPS assembly language explains
the instructions used to implement these actions.
Parameter passing
In order to correctly handle the formal parameters within the body of the callee, the symbol table
entry for each formal parameter must include an attribute that indicates the parameter passing
mode, that is, by-value or by-reference. Remember that we do not pass arrays as parameters. On
a method invocation, call-by-value parameters are handled by allocating the local store for the size
of the object in the activation record of the callee and then evaluating the actual parameter and
initializing the local store within the callee with the value of the actual parameter. All accesses to
that formal parameter will change the value in the local space, with no effect on the caller. On a
return, no values are copied back to the caller.
Call-by-reference parameters are handled by allocating local space in the callee’s activation
record for the address of the actual parameter and then copying the address of the actual parameter
into that local space. All accesses to that formal parameter during execution of the callee are indirect
accesses through this address, having a direct effect on the caller. On return, no action is taken
other than reclaiming the space.
Note that MIPS has a convention that the first 4 arguments of a method call are passed in
register $a0-$a3. You have the option to follow this convention.
Register Usage
In the MIPS processor, certain registers are typically reserved for special purposes. You should
abide by these conventions.
Possible Functions
You may want to write the following functions to help in the code generation.
1. emit call(func name, num arg)/*emit a call instruction; func name: function id lexeme pointer;
num arg: number of arguments */
2. emit label(l num)/*emit a definition of a label; l num: label number; example: L=102, code
generated = “L 102” */
3
3. emit goto(operator, l num) /*emit unconditional and conditional jump instructions; operator:
an operator in the branch-jump group; l num: label number */
4. emit data(name, type, size) /* emit one data line, which is used for STATIC allocation;
name: data object id lexeme pointer; type: type width; size: number of elements of above type
*/
5. emit str(name, str) /* emit a string constant definition line; name: pointer to the name
lexeme; str: pointer to the str */
6. emit most(operator, type, num op, op1, op2, op3) /* emit most of the instructions; operator:
one of the instructions in the general group; type: data type; num op: number of operators 1,
2 and/or 3; op1...3: operands, op2 and op3 can be omitted depending on num op */
Run-time Error Detection
You do not need to generate any run-time checks. Thus you can assume that array bounds are
within range and scalars are within range.
Testing your code
The code generated is MIPS assembly code and should follow the descriptions specified in the
handout SPIM S20. Samples will be put on the class webpage.
You can run the generated assembly code on the simulator and check the results. However, the
correct output does not guarantee that your code is completely correct. You should examine your
generated code carefully.
proj4> codeGen < sample1.java
proj4> spim -asm -file code.s
... ...
or
proj4> spim
(spim) load “code.s”
(spim) step
[0x00400000] 0x8fa40000 lw $4,0($29)
(spim) run
... ...
Assignment submission
Please submit your project in Canvas before the due time. The submission should be a compressed
file that contains your project source code and readme file (if any).
請加QQ:99515681 或郵箱:99515681@qq.com   WX:codehelp

掃一掃在手機打開當前頁
  • 上一篇:代寫CSC3100 Data Structures
  • 下一篇:CSCC43代做、R設計編程代寫
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    仿真分析咨詢外包服務-結構 / 熱 / CFD流體 / 電磁 / 光學CAE代做
    仿真分析咨詢外包服務-結構 / 熱 / CFD流體
    流體仿真外包多少錢_專業CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務 管路
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真技術服務
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲勞振動
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲
    流體cfd仿真分析服務 7類仿真分析代做服務40個行業
    流體cfd仿真分析服務 7類仿真分析代做服務4
    超全面的拼多多電商運營技巧,多多開團助手,多多出評軟件徽y1698861
    超全面的拼多多電商運營技巧,多多開團助手
    CAE有限元仿真分析團隊,2026仿真代做咨詢服務平臺
    CAE有限元仿真分析團隊,2026仿真代做咨詢服
  • 豆包網頁版入口 Trae 目錄網 排行網

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

      <em id="rw4ev"></em>

        <tr id="rw4ev"></tr>

        <nav id="rw4ev"></nav>
        <strike id="rw4ev"><pre id="rw4ev"></pre></strike>
        国产99精品| 在线日韩欧美| 日韩中文字幕视频在线观看| 欧美日韩亚洲不卡| 国产裸舞福利在线视频合集| 天天综合天天添夜夜添狠狠添| 一级免费a一片| 亚洲乱码一区av黑人高潮| 亚洲一区精品电影| 视频一区三区| 日韩亚洲欧美中文字幕| 欧美日韩国产专区| 婷婷久久综合九色国产成人| 亚洲欧美小说国产图片| 天天摸日日摸狠狠添| 日韩国产欧美在线视频| 亚洲人线精品午夜| 日韩欧美中文视频| 成片免费观看| 欧美日韩综合在线| 日韩欧美专区在线| 欧美日韩亚洲国产综合| 精品一区二区在线观看视频| 亚洲永久免费视频| 久久精品欧美日韩精品| 日韩久久不卡| 欧美日韩亚洲国产综合| 亚洲一区二区三区精品中文字幕| 中文字幕 乱码 中文乱码91| 午夜国产在线| 精品在线观看一区| 国产黄在线观看免费观看不卡| a级在线免费观看| 中文字幕日韩欧美| 欧美日韩一级黄| 亚洲免费婷婷| 亚洲成年人影院在线| 91精品国产综合久久香蕉的特点| 九九在线精品| 欧美激情视频一区二区三区在线播放| 欧美三级日韩三级国产三级| 国产日韩在线视频| 福利一区二区| 亚洲男女av一区二区| 91精品国产91久久久久久久久| 一二三区精品福利视频| 精品成a人在线观看| 国产99对白在线播放| 激情婷婷亚洲| 精品久久久久久无| 日韩中文字幕综合| 综合激情一区| 欧美久久久久久蜜桃| 中文字幕精品在线视频| 亚洲一二三不卡| 99pao成人国产永久免费视频| 中文官网资源新版中文第二页在线观看| 亚洲最新免费视频| 日韩中文字幕精品视频| 日韩欧美不卡| 亚洲成在线观看| 国产综合成人久久大片91| 在线视频你懂得一区| 日韩精品在线播放| 中文字幕日韩第一页| 日本a级黄色| 高清在线一区| 日韩在线一区二区视频| 日韩国产成人精品| 亚洲福利一区| 国产传媒久久久| 日韩欧美在线综合网| 久久香蕉精品| 欧美亚洲视频在线看网址| 在线视频第一页| 久久99蜜桃精品久久久久小说| 欧美日韩国产一中文字不卡| 色综合天天综合网国产成人综合天| 日韩精品一区二区三区视频播放| 在线观看一区| 中文字幕一区不卡| 国内国产区免费视频| 黄色国产在线| 国产网站欧美日韩免费精品在线观看| 91精品国产综合久久久蜜臀粉嫩| 亚洲国产www| 亚洲免费观看视频| 国产欧美日韩在线看| 中文字幕亚洲欧美| 欧美日韩成人一区二区| www.久久草| 国产欧亚日韩视频| 日韩精品一二三四区| 91精品视频观看| 欧美日韩不卡在线视频| 中文字幕国产在线| 日韩在线视频观看正片免费网站| 欧美日韩国产中文精品字幕自在自线| 中文字幕精品在线播放| 蜜臀久久精品| 国产成人一区二区精品非洲| 蜜臀91精品国产高清在线观看| 国产视频一区三区| 亚洲高清不卡一区| 亚洲精品中文字幕乱码三区不卡| 亚洲第一中文字幕| 国产日韩1区| 久久电影国产免费久久电影| 国产福利精品导航| 日韩中文字幕观看| 国产在线不卡一区| www.xxxx精品| 亚洲欧洲三级| 精品999在线| 亚洲一区中文在线| 久久精品国产99| av一区二区高清| 亚洲黄色片在线观看| 国产一卡二卡3卡4卡四卡在线| 欧美日韩中文国产| 精品综合久久久久| 国产福利一区二区精品秒拍| 一区二区三区免费看视频| 亚洲最新永久观看在线| 91精品视频观看| 国产福利一区二区精品秒拍| 亚洲欧美日本国产专区一区| 午夜国产在线视频| 蜜臀国产一区| 亚洲一区在线观看视频| 精品久久久三级| 日韩视频中文字幕| 亚洲一区日韩精品中文字幕| 日韩亚洲欧美中文三级| wwwav91com| 免费网站看黄yyy222| 亚洲人线精品午夜| 欧美日韩99| 亚洲热线99精品视频| 日韩高清不卡一区二区| 在线黄色国产电影| aaa欧美日韩| 欧美日韩中国免费专区在线看| 精品极品三级久久久久| 亚洲乱码视频| 麻豆精品视频入口| 一区二区三区在线播放视频| 欧美亚洲免费高清在线观看| 亚洲国产一区自拍| 欧美日韩高清不卡| 欧美 日韩 国产 在线| 日韩欧美国产免费| 欧美不卡视频一区发布| 日韩在线观看视频一区二区| 日韩精品乱码av一区二区| 欧美 日韩 综合| 亚洲天堂国产视频| 在线观看国产一区| 久久久久黄色| 在线一区免费| 亚洲乱码一区av黑人高潮| 国产视频一区三区| 97视频在线| 国产高清在线观看|