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

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

代做Micro Language Compiler

時(shí)間:2024-02-07  來(lái)源:合肥網(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.
如有需要,請(qǐng)加QQ:99515681 或WX:codehelp

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

    合肥圖文信息
    流體仿真外包多少錢(qián)_專(zhuān)業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢(qián)_專(zhuān)業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場(chǎng)仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢(xún)服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢(xún)服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢(xún)外包_剛強(qiáng)度疲勞振動(dòng)
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢(xún)外包_剛強(qiáng)度疲
    流體cfd仿真分析服務(wù) 7類(lèi)仿真分析代做服務(wù)40個(gè)行業(yè)
    流體cfd仿真分析服務(wù) 7類(lèi)仿真分析代做服務(wù)4
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開(kāi)團(tuán)助手,多多出評(píng)軟件徽y1698861
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開(kāi)團(tuán)助手
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢(xún)服務(wù)平臺(tái)
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢(xún)服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗(yàn)證碼 豆包網(wǎng)頁(yè)版入口 破天一劍 目錄網(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號(hào)-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    亚洲一区二区自拍| 国产精品伊人日日| 欧美大陆一区二区| 国产成人精品视| 一区二区不卡在线视频 午夜欧美不卡'| 欧美日韩国产综合视频在线| 久久青青草原| 午夜精品免费视频| 91久久精品美女| 在线观看免费91| 国产女人18毛片| 精品久久一二三| 麻豆精品视频| 久久电影一区二区| 免费不卡av在线| 国产精品久久久久福利| 日韩精品―中文字幕| 久久精品日韩| 日韩精品久久一区二区三区| 久久这里只有精品23| 天堂v在线视频| 国产成人亚洲综合91精品| 午夜精品久久久久久99热| 成人av免费看| 亚洲视频电影| 91九色国产视频| 久久综合88中文色鬼| 精品国产免费久久久久久尖叫| 久久婷婷开心| 精品久久中出| 国产美女被下药99| 国产精品久久久一区二区三区| 琪琪亚洲精品午夜在线| 久久久国产视频| 国模精品一区二区三区| 久久av在线看| 成人h在线播放| 大地资源第二页在线观看高清版| 久久久视频精品| 日韩精品一区二区三区久久| 久久久久久人妻一区二区三区| 秋霞无码一区二区| 国产精品久久9| 成人久久18免费网站图片| 亚洲啊啊啊啊啊| 久久国产精品免费观看| 日韩精品电影网站| 国产精品区二区三区日本| 国产三区精品| 亚洲成熟丰满熟妇高潮xxxxx| 久久久久久香蕉| 精品一区二区三区国产| 中日韩在线视频| 国产成人黄色av| 国内精品在线观看视频| 中文字幕久久一区| 久久精品国产理论片免费| 欧美亚洲国产视频| 蜜臀久久99精品久久久无需会员 | 91精品久久久久久久久久入口| 欧美一级片免费观看| 久久久国产在线视频| 国产精品亚洲αv天堂无码| 日本在线视频不卡| 国产精品国产三级欧美二区| 97色伦亚洲国产| 欧美中文字幕精品| 一区二区视频在线免费| 久久久久久久久亚洲| 国产一区二区色| 日韩不卡一二区| 色综合久久88| 久草精品在线播放| 成人av在线天堂| 人禽交欧美网站免费| 欧美日韩第一页| 久久久久久尹人网香蕉| 精品一区二区三区日本| 日本中文字幕一级片| 精品久久久久久无码国产| 久久久之久亚州精品露出| 精品午夜一区二区| 日韩日韩日韩日韩日韩| 久久91精品国产91久久跳| 国产成人综合精品| 豆国产97在线| 激情伊人五月天| 日韩av免费在线播放| 欧美激情视频网| 日韩三级成人av网| 91精品国产精品| 国产女人18毛片| 韩国成人一区| 天堂av在线中文| 久久久999国产精品| 一道本在线观看视频| 久久99国产精品自在自在app| 久久久久久艹| 91精品国产91久久久久福利| 国产免费一区视频观看免费| 欧美一区二三区| 日本亚洲精品在线观看| 亚洲一区三区电影在线观看| 国产精品电影网| 久久久久久噜噜噜久久久精品| 99爱视频在线| 成人综合国产精品| 国产欧美va欧美va香蕉在| 精品视频一区二区| 欧美极品日韩| 欧美日韩激情四射| 欧美一区二视频在线免费观看| 日本不卡高字幕在线2019| 亚洲蜜桃在线| 综合操久久久| 欧美日韩国产va另类| 精品国产免费人成电影在线观... 精品国产免费一区二区三区 | 久久久久久亚洲精品| 久久久一本二本三本| 成人av在线亚洲| av电影一区二区三区| 成人精品视频在线| 97久久精品在线| 97国产在线观看| 91久久精品国产91久久| 91精品国产高清自在线| 97精品视频在线| av免费观看网| 91精品国产自产91精品| 久久久亚洲欧洲日产国码aⅴ| 国产裸体写真av一区二区| 国产美女精品视频| 成人免费福利视频| 7777在线视频| 久久精品日产第一区二区三区精品版 | 婷婷五月色综合| 日本一区二区高清视频| 日韩女优在线播放| 欧洲成人在线视频| 欧美日韩在线高清| 国产在线精品一区免费香蕉| 国产日产欧美a一级在线| 免费国产成人av| 国产美女作爱全过程免费视频| 成人免费网视频| 久久在线中文字幕| 日韩中文字幕网址| 国产精品国产精品国产专区蜜臀ah| 国产精品第一页在线| 中文字幕一区二区三区在线乱码| 亚洲视频精品一区| 日韩欧美在线一区二区| 欧美一性一乱一交一视频| 欧美精品一区三区在线观看| 麻豆成人在线播放| 91久久精品一区二区别| 久久久久久中文| 日韩视频在线观看免费| 国产精品久久91| 亚洲精品久久久久久一区二区| 日本高清视频一区| 精品视频一区二区三区四区| 99se婷婷在线视频观看| 日韩亚洲综合在线| 国产精品成熟老女人| 亚洲日本无吗高清不卡| 热99在线视频| 裸模一区二区三区免费| 91久久久久久久久久久| 国产成人精品午夜| 中文字幕一区综合| 欧美日韩免费高清| 国产视频一区二区不卡| 91av成人在线| 国产精品国产精品国产专区不卡 | 午夜精品美女自拍福到在线 | 国产美女被下药99| 久久久久久久久久久久久久久久av | 欧日韩免费视频| 国产在线精品一区二区三区| 91精品国产91久久| 国产精品久久久久久久久久久久久久 | 综合色婷婷一区二区亚洲欧美国产| 日本女人高潮视频| 国产三级中文字幕| 日韩在线播放视频| 亚洲制服欧美久久| 免费看黄色a级片| 久久久久综合一区二区三区| 色综合天天狠天天透天天伊人| 人人妻人人澡人人爽欧美一区| 国产精品一二区| 国产精品视频一区国模私拍 | 色狠狠久久av五月综合| 国产一级不卡毛片| 国产成人av影视| 伊人天天久久大香线蕉av色| 精品人妻一区二区三区四区在线| 91av视频在线免费观看| 九九热精品视频在线播放|