99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

合肥生活安徽新聞合肥交通合肥房產(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.
如有需要,請(qǐng)加QQ:99515681 或WX:codehelp

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

    合肥圖文信息
    急尋熱仿真分析?代做熱仿真服務(wù)+熱設(shè)計(jì)優(yōu)化
    急尋熱仿真分析?代做熱仿真服務(wù)+熱設(shè)計(jì)優(yōu)化
    出評(píng) 開團(tuán)工具
    出評(píng) 開團(tuán)工具
    挖掘機(jī)濾芯提升發(fā)動(dòng)機(jī)性能
    挖掘機(jī)濾芯提升發(fā)動(dòng)機(jī)性能
    海信羅馬假日洗衣機(jī)亮相AWE  復(fù)古美學(xué)與現(xiàn)代科技完美結(jié)合
    海信羅馬假日洗衣機(jī)亮相AWE 復(fù)古美學(xué)與現(xiàn)代
    合肥機(jī)場巴士4號(hào)線
    合肥機(jī)場巴士4號(hào)線
    合肥機(jī)場巴士3號(hào)線
    合肥機(jī)場巴士3號(hào)線
    合肥機(jī)場巴士2號(hào)線
    合肥機(jī)場巴士2號(hào)線
    合肥機(jī)場巴士1號(hào)線
    合肥機(jī)場巴士1號(hào)線
  • 短信驗(yàn)證碼 豆包 幣安下載 AI生圖 目錄網(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

    99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

          红桃视频一区| 日韩亚洲一区二区| 亚洲欧美视频在线观看| 欧美四级在线观看| 精品不卡视频| 欧美成人国产一区二区| 国产午夜精品福利| 欧美有码在线观看视频| 国内精品久久久久影院薰衣草| 亚洲影视九九影院在线观看| 欧美精品在线视频| 一区二区三区久久久| 欧美三级午夜理伦三级中文幕| 在线视频一区观看| 国产亚洲欧美在线| 久久综合影音| 亚洲免费福利视频| 国产欧美日韩在线 | 免费永久网站黄欧美| 一本久久青青| 国产一区二区av| 国产精品国产自产拍高清av王其| 欧美一区二区三区四区夜夜大片| 一区二区三区自拍| 国产精品久久久久久福利一牛影视| 亚洲欧美韩国| 亚洲色无码播放| 亚洲激情网站| 国模叶桐国产精品一区| 欧美三级日韩三级国产三级| 久久久亚洲国产美女国产盗摄| 一本到高清视频免费精品| 国产精品日韩欧美一区| 欧美日韩精品综合在线| 欧美成人精品福利| 久久先锋影音| 欧美在线视频全部完| 亚洲先锋成人| 亚洲久久成人| 亚洲一区一卡| 亚洲欧美日韩人成在线播放| 亚洲人精品午夜| 亚洲国产精品尤物yw在线观看| 国产视频欧美视频| 欧美三级在线视频| 欧美激情网友自拍| 欧美三日本三级少妇三2023| 欧美精品手机在线| 国产精品一级久久久| 国产欧美一区二区三区在线看蜜臀| 麻豆精品传媒视频| 国产精品久久久久久久久免费桃花 | 日韩特黄影片| 亚洲一区视频在线观看视频| 久久婷婷蜜乳一本欲蜜臀| 欧美激情精品| 久久免费国产| 久久成人精品电影| 国产精品一区二区三区免费观看 | 亚洲午夜视频在线| 一区二区电影免费观看| 精品成人免费| 国产亚洲人成a一在线v站| 欧美性猛交99久久久久99按摩| 美脚丝袜一区二区三区在线观看 | 欧美日本久久| 欧美偷拍另类| 国产精品地址| 国产精品视频一区二区三区| 国产精品爱啪在线线免费观看| 欧美高清视频一区二区三区在线观看| 久久看片网站| 蜜臀久久99精品久久久久久9| 蜜桃久久精品一区二区| 欧美理论在线| 国产精品一区一区三区| 伊人精品成人久久综合软件| 亚洲第一区在线观看| 艳女tv在线观看国产一区| 一区二区三区欧美激情| 新狼窝色av性久久久久久| 久久久久久69| 欧美日韩午夜剧场| 国产亚洲精品久久久久动| 亚洲国产成人精品久久久国产成人一区| 国产日韩精品一区二区浪潮av| 在线免费观看日韩欧美| 亚洲一二区在线| 欧美精品一线| 亚洲第一福利视频| 亚洲一区二区三区在线播放| 久久久激情视频| 国产欧美在线看| 亚洲私人影院在线观看| 麻豆精品一区二区av白丝在线| 欧美午夜宅男影院在线观看| 亚洲高清在线精品| 久久男人av资源网站| 国产一区日韩二区欧美三区| 亚洲一区二区欧美| 国产精品videosex极品| 亚洲乱码国产乱码精品精天堂| 另类av一区二区| 在线视频成人| 蜜臀av一级做a爰片久久| 国产欧美日韩视频| 欧美尤物巨大精品爽| 国产一区二区三区在线观看免费 | 久久国产主播| 国产精品国码视频| 欧美一区1区三区3区公司| 欧美精品久久一区| 亚洲人成免费| 久久欧美肥婆一二区| 欧美三级电影大全| 黑丝一区二区| 亚洲一级在线观看| 欧美日韩免费在线| 亚洲国产天堂久久综合| 久久成人精品视频| 国产精品成人一区二区三区夜夜夜 | 欧美激情一区| 久久精品国产v日韩v亚洲| 欧美日韩激情小视频| 久久精品国产一区二区三区免费看| 亚洲国产一二三| 欧美日韩精品伦理作品在线免费观看| 亚洲在线视频| 欧美日韩中文字幕在线视频| 久久成人精品电影| 一区二区欧美精品| 国产亚洲制服色| 久久综合九色综合网站| 国产欧美日韩91| 欧美国产先锋| 久久久久成人精品| 99re66热这里只有精品4| 欧美va天堂va视频va在线| 亚洲一区免费在线观看| 亚洲国产另类久久精品| 欧美视频官网| 亚洲一区二区免费| 91久久久一线二线三线品牌| 国产精品va在线| 欧美电影打屁股sp| 久久精品视频网| 日韩视频专区| 国产亚洲欧美另类中文| 欧美视频四区| 欧美日韩一区二区在线视频| 亚洲综合色自拍一区| 在线视频精品一区| 亚洲视频在线播放| 亚洲日韩欧美一区二区在线| 欧美视频在线视频| 国产欧美视频一区二区三区| 国产精品乱码一区二三区小蝌蚪| 欧美.com| 欧美日韩精品| 免费亚洲网站| 久久九九久精品国产免费直播| 欧美中文字幕在线观看| 免费观看不卡av| 午夜精品久久久久久久蜜桃app| 国产欧亚日韩视频| 亚洲精品一区二区三| 亚洲精品日韩在线观看| 亚洲国产精品嫩草影院| 亚洲欧美国产一区二区三区| 亚洲另类一区二区| 亚洲免费成人av| 久久久精彩视频| 欧美午夜精品一区| 99视频有精品| 欧美噜噜久久久xxx| 国产欧美精品日韩| 亚洲女人天堂成人av在线| 欧美精品久久99| 亚洲精品视频在线看| 久久精品国内一区二区三区| 理论片一区二区在线| 国产在线一区二区三区四区 | 国产精品久在线观看| 韩国一区电影| 亚洲图片激情小说| 欧美精品二区三区四区免费看视频| 怡红院精品视频在线观看极品| 亚洲尤物在线| 国产精品乱子久久久久| 亚洲日本无吗高清不卡| 老色鬼精品视频在线观看播放| 国产精品久久久久国产a级| 久久精品视频在线免费观看| 国产精品一级在线| 亚洲黄色免费电影| 欧美在线|欧美| 国产亚洲高清视频| 久久精品国产一区二区三区| 国产一区视频网站| 欧美18av|