国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

代做Micro Language Compiler

時(shí)間:2024-02-07  來源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯(cuò)



Assignment 1: Micro Language Compiler
1 Introduction
In this assignment, you are required to design and implement a compiler frontend for Micro
language which transforms the Micro Program into corresponding LLVM Intermediate Representation (IR) and finally translated to RISC-V assembly code and executable with the help of
LLVM optimizer and its RISC-V backend. After that, we can execute the compiled program on our
RISC-V docker container to verify the correctness of your compiler.
Since it is a senior major elective course, we don’t want to set any limitation for you. You are strongly
recommended to use Lex/Flex and Yacc/Bison taught in tutorial 3 to design your compiler frontend,
but it is not forcible. You can choose Any Programming Language you like for this assignment,
but the RISC-V container we use only has C/C++ toolchain installed and you need to provide me a
Dockerfile to run your compiler and execute the RISC-V program, which may need some extra effort.
Some languages also provide tools like Lex and Yacc, and you are free to use them. It is also OK if
you want to design the scanner and parser by hand instead of using tools.
2 Micro Language
Before we move on to the compiler design, it is necessary to have an introduction to Micro Language,
that serves as the input of our compiler. Actually, it is a very simple language, with limited number
of tokens and production rules of context-free grammar (CFG):
• Only integers(i**); No float numbers
• No Declarations
• Variable consists of a-z, A-Z, 0-9, at most ** characters long, must start with character and are
initialized as 0
• Comments begin with ”−−” and end with end-of-line(EOL)
• Three kind of statements:
– assignments, e.g. a:=b+c
– read(list of IDs), e.g. read(a, b)
– write(list of Expressions), e.g. write (a, b, a+b)
• BEGIN, END, READ, WRITE are reserved words
• Tokens may not extend to the following line
1
2.1 Tokens & Regular Expression
Micro Language has 14 Tokens, and the regular expression for each token is listed below. Since BEGIN
is a reserved word in C/C++, we need to use the alternative BEGIN as the token class.
1. BEGIN : begin
2. END: end
3. READ: read
4. WRITE: write
5. LPAREN: (
6. RPAREN: )
7. SEMICOLON: ;
8. COMMA: ,
9. ASSIGNOP: :=
10. PLUSOP: +
11. MINUSOP: −
12. ID: [a−zA−Z][a−zA−Z0−9 ]{0,31}
13. INTLITERAL: −?[0−9]+
14. SCANEOF: <<EOF>>
2.2 Context Free Grammar
Here is the extended context-free grammar (CFG) of Micro Language:
1. <start> → <program> SCANEOF
2. <program> → BEGIN <statement list> END
3. <statement list> → <statement> {<statement>}
4. <statement> → ID ASSIGNOP <expression>;
5. <statement> → READ LPAREN <id list> RPAREN;
6. <statement> → WRITE LPAREN<expr list> RPAREN;
7. <id list > → ID {COMMA ID}
8. <expr list > → <expression> {COMMA <expression>}
9. <expression> → <primary> {<add op> <primary>}
10. <primary> → LPAREN <expression> RPAREN
11. <primary> → ID
12. <primary> → INTLITERAL
13. <add op> → PLUSOP
14. <add op> → MINUSOP
Note: {} means the content inside can appear 0, 1 or multiple times.
2.3 How to Run Micro Compiler
Here is a very simple Micro program that we are going to use as the sample program throughout this
instruction. SCANEOF is the end of line and we do not need to explicitly write it in the program.
−− Expected Output: 30
begin
A := 10;
B := A + 20;
write (B);
end
We can use our compiler to compile, optimize and execute this program to get expected output 30.
Note: The exact command to run your compiler is up to you. Just specify out in your report how
to compile and execute your compiler to get the expected output.
118010200@c2d52c9b1339:˜/A1$ ./compiler ./testcases/test0.m
118010200@c2d52c9b1339:˜/A1$ llc −march=riscv64 ./program.ll −o ./program.s
118010200@c2d52c9b1339:˜/A1$ riscv64−unknown−linux−gnu−gcc ./program.s −o ./program
118010200@c2d52c9b1339:˜/A1$ qemu−riscv64 −L /opt/riscv/sysroot ./program
30
2
3 Compiler Design
Figure 1 shows the overall structure of a compiler. In this assignment, your task is to implement the
frontend only, which contains scanner, parser and intermediate code generator and form a whole →
compiler with LLVM for Micro language.
Figure 1: Compiler Structure
3.1 Scanner
Scanner takes input character stream and extracts out a series of tokens, and your scanner should
be able to print out both token class and lexeme for each token. Figure ?? shows an example of the
sample Micro program.
118010200@c2d52c9b1339:˜/A1$ ./compiler ./testcases/test0.m −−scan−only
BEGIN begin
ID A
ASSIGNOP :=
INTLITERAL 10
SEMICOLON ;
ID B
ASSIGNOP :=
ID A
PLUOP +
INTLITERAL 20
SEMICOLON ;
WRITE write
LPAREN (
ID B
RPAREN )
SEMICOLON ;
END end
SCANEOF
3
3.2 Parser
Parser receives the tokens extracted from scanner, and generates a parse tree (or concrete syntax tree),
and futhermore, the abstract syntax tree (AST) based on the CFG. Your compiler should be able to
print out both the parse tree and the abstract syntax tree, and visualize them with graphviz.
3.2.1 Parse Tree (Concrete Syntax Tree)
Figure 2 shows an example of the concrete syntax tree generated from the sample program:
Figure 2: Concrete Syntax Tree of Sample Program
3.2.2 Abstract Syntax Tree
Figure 3 shows an example of the abstract syntax tree generated from the sample program:
Figure 3: Abstract Syntax Tree of Sample Program
4
3.3 Intermediate Code Generator
For all the assignments in this course, the intermediate representation (IR) of the compiler should be
the LLVM IR. There are mainly two reasons why LLVM IR is chosen. One is that LLVM IR can take
advantage of the powerful LLVM optimizer and make up for the missing backend part of compiler in
this course. The other is that LLVM IR can be easier translated into assembly code for any target
machine, no matter MIPS, x86 64, ARM, or RISC-V. This functionality can make our compiler more
compatible to machines with different architecture. The following shows the LLVM IR generated for
the sample Micro program:
; Declare printf
declare i** @printf (i8 ∗, ...)
; Declare scanf
declare i** @scanf(i8 ∗, ...)
define i** @main() {
% ptr0 = alloca i**
store i** 10, i**∗ % ptr0
%A = load i**, i**∗ % ptr0
% 1 = add i** %A, 20
store i** % 1, i**∗ % ptr0
%B = load i**, i**∗ % ptr0
% scanf format0 = alloca [4 x i8 ]
store [4 x i8 ] c”%d\0A\00”, [4 x i8]∗ % scanf format0
% scanf str0 = getelementptr [4 x i8 ], [4 x i8]∗ % scanf format0, i** 0, i** 0
call i** (i8 ∗, ...) @printf (i8∗ % scanf str0 , i** %B)
ret i** 0
}
3.4 Bonus (Extra Credits 10%)
If you are interested and want to make your compiler better, you may try the following options:
• Add robust syntax error report
• Add a symbol table to make your compiler more complete
• Generate LLVM IR with LLVM C/C++ API instead of simply generating the string
• Optimize the LLVM IR generation plan for more efficient IR
• Any other you can think about...
4 Submission and Grading
4.1 Grading Scheme
• Scanner: 20%
• Parser: 40% (20% for parse tree generator and 20% for AST generation)
• Intermediate Code Generator: 30%
We have prepared 10 test cases, and the points for each section will be graded according to the
number of testcases you passed.
• Technical Report: 10%
If your report properly covers the three required aspects and the format is clean, you will get 10
points.
5
• Bonus: 10%
Refer to section 3.4 for more details. The grading of this part will be very flexible and highly
depend on the TA’s own judgement. Please specify clearly what you have done for the bonus
part so that he do not miss anything.
4.2 Submission with Source Code
If you want to submit source C/C++ program that is executable in our RISC-V docker container,
your submission should look like:
csc4180−a1−118010200.zip
|−
|−−− csc4180−a1−118010200−report.pdf
|−
|−−− testcases
|−
|−−− src
|−
|−−−Makefile
|−−−ir generator.cpp
|−−−ir generator.hpp
|−−−node.cpp
|−−−node.hpp
|−−−scanner.l
|−−−parser.y
|−−−Other possible files
4.3 Submission with Docker
If you want to submit your program in a docker, your submission should look like:
csc4180−a1−118010200.zip
|−
|−−− csc4180−a1−118010200.Dockerfile
|−
|−−− csc4180−a1−118010200−report.pdf
|−
|−−− src
|−
|−−−Makefile
|−
|−−−run compiler.sh
|−
|−−−Your Code Files
4.4 Technical Report
Please answer the following questions in your report:
• How to execute your compiler to get expected output?
• How do you design the Scanner?
• How do you design the Parser?
• How do you design the Intermediate Code Generator?
• Some other things you have done in this assignment?
The report doesn’t need to be very long, but the format should be clean. As long as the three questions
are clearly answered and the format is OK, your report will get full mark.
如有需要,請加QQ:99515681 或WX:codehelp

掃一掃在手機(jī)打開當(dāng)前頁
  • 上一篇:COM3524代做、代寫Java,Python編程設(shè)計(jì)
  • 下一篇:CISC3025代做、代寫Java,c++設(shè)計(jì)編程
  • 無相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強(qiáng)度疲勞振動(dòng)
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強(qiáng)度疲
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)40個(gè)行業(yè)
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)4
    超全面的拼多多電商運(yùn)營技巧,多多開團(tuán)助手,多多出評軟件徽y1698861
    超全面的拼多多電商運(yùn)營技巧,多多開團(tuán)助手
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢服務(wù)平臺(tái)
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗(yàn)證碼 寵物飼養(yǎng) 十大衛(wèi)浴品牌排行 suno 豆包網(wǎng)頁版入口 目錄網(wǎng) 排行網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    国内伊人久久久久久网站视频| 久久免费国产精品1| 亚洲综合精品伊人久久| 精品中文字幕在线| 最新不卡av| 亚洲乱码一区二区三区 | 久久亚洲影音av资源网| 国产精品久久av| 国产精品美女xx| 伦理中文字幕亚洲| 国产精品第七影院| 麻豆成人在线看| 久久久久久12| 亚洲一区二区三| 少妇高清精品毛片在线视频 | 国产无套粉嫩白浆内谢的出处| 蜜桃精品久久久久久久免费影院| 国产有码在线一区二区视频| 国产日本欧美视频| 99热成人精品热久久66| 久久亚洲综合网| 久久精品成人一区二区三区| 欧美成aaa人片免费看| 亚洲精品日产aⅴ| 日本一区二区三不卡| 红桃av在线播放| 成人福利网站在线观看| 国产成人aa精品一区在线播放| 国产精品视频网站| 中文字幕中文字幕在线中一区高清| 欧美一区二区三区……| 国内一区二区三区在线视频| 成人h视频在线观看| 色噜噜狠狠色综合网图区| 欧美成人亚洲成人| 手机看片日韩国产| 国产尤物av一区二区三区| 国产精品a久久久久久| 国产成人精品视| 久久精品影视伊人网| 一区二区三区视频在线播放| 日本一区视频在线播放| 免费av观看网址| 久久久亚洲欧洲日产国码aⅴ| 国产精品美乳在线观看| 岛国一区二区三区高清视频| 欧美成人一区二区在线观看| 91久久国产自产拍夜夜嗨| 国产精品免费网站| 日日噜噜夜夜狠狠久久丁香五月| 精品一区在线播放| 久久久久久久香蕉网| 国产99久久精品一区二区永久免费| 日韩av免费在线播放| 国产免费一区二区三区在线观看 | 精品999在线观看| 91精品国产精品| 久99久在线视频| 欧美精品一区二区视频| 国产成一区二区| 亚洲砖区区免费| 日韩欧美一区二区三区四区五区 | 国产三级中文字幕| 日日骚久久av| 无码内射中文字幕岛国片| 欧美日韩国产二区| 精品一区二区三区自拍图片区| 久久久久久久久中文字幕| 亚洲精品日韩精品| 超碰成人在线免费观看| 不卡中文字幕av| 黄色免费高清视频| 久久久精品亚洲| 欧美一区二区激情| 91国产丝袜在线放| 亚洲人成无码www久久久| 国产乱码精品一区二区三区日韩精品| 国产精品美女久久久久久免费| 热re99久久精品国产99热| 久久最新免费视频| 亚洲人成网站在线播放2019| 国产精品一二区| 欧美精品video| 国产精品一 二 三| 亚洲一区二区免费| 不卡视频一区二区| 欧美激情在线有限公司| 国产欧美在线看| 伊人久久青草| 91成人福利在线| 日本一区二区在线视频观看| 久久天天东北熟女毛茸茸| 欧美一乱一性一交一视频| 久久国产成人精品国产成人亚洲| 日本精品久久电影| 久久精品国产一区二区三区| 国内精品伊人久久| 欧美日本精品在线| www.av一区视频| 亚洲 国产 日韩 综合一区| 91精品国产综合久久久久久丝袜| 水蜜桃亚洲一二三四在线| 国产成人精品日本亚洲11| 欧美亚洲成人网| 国产精品第8页| av一区观看| 日本不卡在线观看| 国产精品美女xx| 成人免费无码av| 欧美一级欧美一级| 国产成人精品在线| 国产色一区二区三区| 婷婷久久五月天| 国产精品日韩欧美一区二区| 国产美女精品视频| 色综合视频二区偷拍在线| 久久国产精品高清| 激情视频综合网| 亚洲在线一区二区| 久久久久久久久久福利| 国产一区二区三区高清| 懂色av粉嫩av蜜臀av| 国产精品天天av精麻传媒| 国产精选一区二区| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产主播在线看| 这里只有精品66| 久久精精品视频| 国产嫩草一区二区三区在线观看| 春日野结衣av| 成人444kkkk在线观看| 国产精华一区| 免费久久久一本精品久久区| 亚洲www永久成人夜色| 国产精品免费看一区二区三区 | 国产精品久久久久久久一区探花| 国产精品一区二区不卡视频| 日韩欧美手机在线| 一区二区三区免费看| 色偷偷av亚洲男人的天堂| 国产精品一区二区三区成人| 热99这里只有精品| 亚洲精品欧美一区二区三区| 操人视频在线观看欧美| 色偷偷88888欧美精品久久久| 成人av在线网址| 蜜桃久久精品乱码一区二区| 国产一区二区四区| 女同一区二区| 久久久久久久色| 国产精品成人播放| 国产成人在线一区二区| 国产日韩欧美自拍| 欧美极品视频一区二区三区| 在线视频亚洲自拍| 国产精品视频专区| 97干在线视频| 国产午夜大地久久| 黄色一级片国产| 青青在线视频一区二区三区| 亚洲精品乱码久久久久久蜜桃91 | 久久97久久97精品免视看| 视频直播国产精品| 国产成人97精品免费看片| 91精品国产综合久久久久久久久| 国产精品一区二| 黄色一级二级三级| 欧美在线日韩精品| 日本成人中文字幕在线| 日韩在线视频在线观看| 亚州国产精品久久久| 宅男一区二区三区| 在线亚洲美日韩| 欧美激情久久久久| 欧美精品福利在线| 一本色道久久综合亚洲精品婷婷| 精品日本一区二区| 欧美亚洲成人免费| 国产精品盗摄久久久| av一区二区三区四区电影| 国产日韩欧美综合精品| 免费在线黄网站| 欧美精品国产精品久久久| 人体精品一二三区| 日韩欧美在线免费观看视频| 日本wwww视频| 欧美日韩成人一区二区三区| 欧美日韩日本网| 精品无人区一区二区三区| 国产在线视频91| 国产精品影院在线观看| 99久热re在线精品视频| 国产精品91久久| 国产xxx69麻豆国语对白| 日韩亚洲欧美中文在线| 国产精品久久久久7777| 久久国产精品电影| 中文字幕人成一区| 日韩中文字幕在线不卡| 欧美久久久久久久久久久久久久|