91精品国产91久久久久久_国产精品二区一区二区aⅴ污介绍_一本久久a久久精品vr综合_亚洲视频一区二区三区

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

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設計編程代寫
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    2025年10月份更新拼多多改銷助手小象助手多多出評軟件
    2025年10月份更新拼多多改銷助手小象助手多
    有限元分析 CAE仿真分析服務-企業/產品研發/客戶要求/設計優化
    有限元分析 CAE仿真分析服務-企業/產品研發
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    出評 開團工具
    出評 開團工具
    挖掘機濾芯提升發動機性能
    挖掘機濾芯提升發動機性能
    海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
    海信羅馬假日洗衣機亮相AWE 復古美學與現代
    合肥機場巴士4號線
    合肥機場巴士4號線
    合肥機場巴士3號線
    合肥機場巴士3號線
  • 短信驗證碼 目錄網 排行網

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

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

    91精品国产91久久久久久_国产精品二区一区二区aⅴ污介绍_一本久久a久久精品vr综合_亚洲视频一区二区三区
    成人免费视频一区| 欧美精品久久天天躁| 色综合欧美在线| caoporen国产精品视频| 成人免费毛片高清视频| 粉嫩绯色av一区二区在线观看| 国产精品一卡二卡在线观看| 九九精品一区二区| 国内精品自线一区二区三区视频| 精品亚洲免费视频| 国产中文字幕一区| 韩国v欧美v日本v亚洲v| 国产精品一级片在线观看| 国产成人丝袜美腿| 成人晚上爱看视频| 色综合久久中文综合久久牛| 欧美日韩免费| 一本色道久久综合| 久久在线视频| 欧美狂野另类xxxxoooo| 精品三级在线看| 国产日韩欧美精品在线| 亚洲欧美在线另类| 亚洲成a人片综合在线| 精品在线免费视频| av在线不卡免费看| 在线播放日韩| 色视频欧美一区二区三区| 欧美日韩一区三区四区| 欧美一级高清片在线观看| 国产色婷婷亚洲99精品小说| 亚洲欧洲中文日韩久久av乱码| 一区二区免费在线| 久久99日本精品| 午夜精品久久| 噜噜噜在线观看免费视频日韩 | 久久这里有精品15一区二区三区| 在线亚洲+欧美+日本专区| 日韩一级完整毛片| 亚洲日本在线天堂| 九色综合国产一区二区三区| 不卡av在线免费观看| 亚洲国内欧美| 精品1区2区3区| 久久精子c满五个校花| 亚洲与欧洲av电影| 国产成人aaaa| 国产一区二区三区奇米久涩| 日韩免费高清视频| 亚洲国产一区二区a毛片| 国产不卡视频在线播放| 伊人精品成人久久综合软件| 欧美精品乱码久久久久久| 一色桃子久久精品亚洲| 韩国av一区二区三区在线观看| 国产精品二区影院| 欧美日韩国产综合久久| 国产精品国产三级国产aⅴ无密码| 日韩av电影一区| 欧美激情一区| 欧美日韩在线精品一区二区三区激情| 国产精品久久毛片a| 国产成人午夜精品5599| 免费在线观看一区二区| 欧美精品一区在线观看| 久久精品久久精品| 国产精品视频免费观看| 国产日产欧美一区二区视频| 国产一区二区三区精品欧美日韩一区二区三区 | 9191精品国产综合久久久久久| 一区二区三区免费观看| 91老师片黄在线观看| 7777精品久久久大香线蕉| 亚洲国产成人高清精品| 亚洲图片在线观看| 久久婷婷久久一区二区三区| 狠狠色狠狠色综合| 亚洲欧美高清| 亚洲三级免费电影| 欧美久久久久| 日韩精品在线一区| 美女视频第一区二区三区免费观看网站| 亚洲国产免费看| 国产无人区一区二区三区| 成人丝袜高跟foot| 日韩一卡二卡三卡| 国内精品国产成人| 91精彩视频在线| 婷婷成人激情在线网| 在线综合亚洲| 一区二区国产视频| 亚洲伦理精品| 一区二区三区四区高清精品免费观看| 黄色欧美日韩| 久久久久久久久久久久久久久99| 丁香网亚洲国际| 日韩一区二区麻豆国产| 国产精品18久久久| 911国产精品| 国产精品一区二区免费不卡 | 久久久另类综合| 99国产一区二区三精品乱码| 精品免费视频.| 国产91高潮流白浆在线麻豆 | 欧美va在线播放| 成人性视频网站| 欧美一区三区二区| 国产99久久久国产精品免费看| 91精品国产综合久久久蜜臀图片| 国产真实乱子伦精品视频| 在线成人免费观看| 成人黄色av电影| 国产三级一区二区| 韩日精品视频| 亚洲综合视频在线观看| 久久久久久自在自线| 免费成人美女在线观看.| 在线观看一区二区视频| 人人精品人人爱| 制服丝袜av成人在线看| caoporn国产精品| 亚洲天堂网中文字| 美女久久网站| 国产精品白丝av| 国产亚洲欧美一区在线观看| 国语精品中文字幕| 午夜精品福利在线| 欧美一区二区三区影视| 欧美精品亚洲| 亚洲丶国产丶欧美一区二区三区| 欧美视频一区二区三区四区| 北岛玲一区二区三区四区| 中文字幕一区日韩精品欧美| 香蕉免费一区二区三区在线观看| 美国毛片一区二区三区| 久久久激情视频| 亚洲一区不卡| 国产成人免费av在线| 国产精品久久久久四虎| 91福利社在线观看| 99久久伊人网影院| 亚洲在线成人精品| 91精品国产91热久久久做人人 | 欧美一区二区三区四区高清| 亚洲视频日本| 国产一区二区毛片| 国产精品久久久久影院亚瑟| 在线看日本不卡| 欧美精品二区| 美女一区二区视频| 国产精品伦理一区二区| 欧美三级电影精品| 国产精品99免费看| 国内外成人在线视频| 亚洲精品欧美激情| 91精品视频网| 国产欧美日韩亚洲一区二区三区| 高清不卡在线观看av| 亚洲高清不卡在线| 国产视频一区在线播放| 欧美三级日本三级少妇99| 国产一区日韩一区| 国产精品456露脸| 亚洲电影欧美电影有声小说| 欧美激情资源网| 91麻豆精品国产91久久久资源速度 | 欧美成人69av| 国产一区二区网址| 五月天网站亚洲| 亚洲欧美一区二区视频| 精品成人一区二区三区| 欧美日韩一级大片网址| 国产视频精品网| 欧美视频网站| 成人短视频下载| 狠狠久久亚洲欧美| 午夜精品久久久久久久久久| 国产精品麻豆99久久久久久| 欧美mv日韩mv国产网站| 欧美色视频一区| 免费试看一区| 国产日韩欧美在线播放不卡| 欧美日韩在线高清| av不卡在线观看| 国产成人在线网站| 精品一二线国产| 青青草成人在线观看| 亚洲va欧美va天堂v国产综合| 日韩一区欧美小说| 中文字幕欧美日本乱码一线二线| 精品久久久久久久久久久院品网| 欧美日韩色综合| 欧美中文字幕亚洲一区二区va在线| 亚洲在线不卡| 国产日韩欧美二区| 成人免费视频一区| 国产欧美一区二区三区沐欲| 欧美探花视频资源| 国产美女精品一区二区三区| 欧美视频一区在线观看|