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爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

          9000px;">

                欧美日韩国产123区| 毛片av中文字幕一区二区| 久久久午夜精品理论片中文字幕| 亚洲美女淫视频| 99久久99久久精品国产片果冻 | 激情综合网最新| 欧美私人免费视频| 亚洲国产va精品久久久不卡综合| 大尺度一区二区| 亚洲欧美在线观看| 日本韩国一区二区三区| 亚洲国产欧美另类丝袜| 国产成人在线视频播放| 欧美美女激情18p| 毛片不卡一区二区| www激情久久| proumb性欧美在线观看| 亚洲综合色视频| 久久久久亚洲蜜桃| youjizz国产精品| 亚洲国产视频网站| 日韩欧美自拍偷拍| 欧洲色大大久久| 国产剧情一区在线| 欧美美女一区二区在线观看| 久久久精品黄色| 精东粉嫩av免费一区二区三区| 91久久精品国产91性色tv| 欧美激情一区二区三区蜜桃视频| 亚洲成av人**亚洲成av**| 成人看片黄a免费看在线| 日韩一区二区电影在线| 亚洲成av人综合在线观看| 色婷婷综合久久久中文一区二区| 91精品国产高清一区二区三区蜜臀| 综合色中文字幕| 不卡的电影网站| 国产亚洲精品资源在线26u| 轻轻草成人在线| 日韩限制级电影在线观看| 天堂蜜桃91精品| 在线播放中文字幕一区| 亚洲一卡二卡三卡四卡无卡久久| 风流少妇一区二区| 在线观看日韩国产| 欧美中文字幕一二三区视频| 91蝌蚪porny九色| 91亚洲精品一区二区乱码| 久久99精品国产.久久久久| 欧美日韩免费电影| 一区二区三区精密机械公司| 欧美自拍偷拍一区| 国产做a爰片久久毛片| 欧美韩国一区二区| 欧美日韩一区久久| 成人动漫av在线| 亚洲午夜国产一区99re久久| 国产精品69毛片高清亚洲| 色一区在线观看| 久久久国产精品午夜一区ai换脸| 亚洲三级久久久| 国产美女精品在线| 日韩一区二区三区在线| 国产精品久久久久永久免费观看 | 日本高清视频一区二区| 欧美日韩一区二区三区视频| 国产欧美一区视频| 久久99久久99精品免视看婷婷| 国产精品天美传媒沈樵| 亚洲成av人综合在线观看| 国产99久久久国产精品潘金| 56国语精品自产拍在线观看| 亚洲综合免费观看高清完整版| 午夜不卡av在线| 欧美日韩mp4| 亚洲第一搞黄网站| 精品入口麻豆88视频| 国产一区二区伦理| 精品成人在线观看| 日韩成人午夜精品| 欧美在线free| 久久国产生活片100| 精品国产一区二区三区忘忧草| 欧美乱熟臀69xxxxxx| 欧美精品777| 久久久影视传媒| 国产精品麻豆视频| 亚洲伦理在线精品| 极品少妇xxxx精品少妇偷拍| 成人av在线影院| 日韩一区二区三区观看| 国产精品区一区二区三区| 久久午夜老司机| 欧美美女一区二区| 一本久久精品一区二区| 美国av一区二区| 亚洲人成精品久久久久久| 欧美v日韩v国产v| 欧美亚洲国产bt| 色猫猫国产区一区二在线视频| 天堂一区二区在线| 久久这里只有精品6| 91精品国产福利在线观看| 成人av手机在线观看| 国产精品18久久久久| 亚洲国产色一区| 亚洲一卡二卡三卡四卡五卡| 国产精品青草久久| 色婷婷久久久亚洲一区二区三区| 一区二区三区在线视频观看58 | 91精品国产综合久久小美女| 久久草av在线| 亚洲第一综合色| 蜜桃精品视频在线观看| 国产精品一二三四| 日韩一区二区影院| 一区二区日韩av| 91成人网在线| 免费视频最近日韩| 欧美精品一区二区精品网| 免费精品视频在线| 精品国产一区二区三区av性色| 婷婷综合久久一区二区三区| 欧美日韩免费一区二区三区 | 美女视频一区在线观看| 国产在线不卡一区| 91成人免费在线视频| 日韩欧美中文字幕一区| 亚洲欧美视频在线观看| 奇米精品一区二区三区四区| 成人一区二区视频| 欧美一二三区在线| 亚洲黄色免费电影| 国产乱人伦偷精品视频不卡 | wwwwww.欧美系列| 91在线视频网址| 极品销魂美女一区二区三区| 亚洲三级免费观看| 国产视频亚洲色图| 日韩午夜激情免费电影| 色婷婷av一区二区三区软件| 国产一区在线看| 蜜臀久久久99精品久久久久久| 亚洲欧美日韩国产一区二区三区| 成人网在线播放| 一区二区中文字幕在线| 国产精品99久久久久久久女警| 3d动漫精品啪啪| 久久精品99国产精品日本| 91精品国产色综合久久久蜜香臀| 久久午夜免费电影| 欧美激情一区二区三区不卡| 精品国产a毛片| 久久久久88色偷偷免费| 日韩精品中文字幕在线不卡尤物| 在线观看91精品国产入口| 91美女片黄在线| 欧美日韩国产精品成人| 欧美日韩亚洲不卡| 日韩三级免费观看| 中文字幕二三区不卡| 国产精品久久久久天堂| 亚洲激情图片一区| 五月婷婷激情综合| 亚洲综合丁香婷婷六月香| 亚洲mv大片欧洲mv大片精品| 日日骚欧美日韩| 国产精华液一区二区三区| 99久久精品国产网站| 欧美一级欧美三级| 中文字幕成人在线观看| 亚洲成人av福利| 国产一区二区调教| 色女孩综合影院| 欧美精品一区二区三区视频| 亚洲欧洲www| 国产福利一区二区三区视频在线 | 中文字幕一区二区三区不卡在线| 欧美电影在哪看比较好| av不卡一区二区三区| 国内成+人亚洲+欧美+综合在线| 亚洲精品国产第一综合99久久 | 在线看日韩精品电影| 91性感美女视频| 色乱码一区二区三区88| 高清不卡一区二区在线| 国产99久久久国产精品| 粉嫩av亚洲一区二区图片| 欧美一区二区不卡视频| 亚洲一线二线三线视频| 91在线小视频| 亚洲品质自拍视频| 色系网站成人免费| 亚洲天堂中文字幕| 91色porny| 日韩精品电影在线| 欧美一区二区三区在| 美国欧美日韩国产在线播放| 日韩一级高清毛片| 国产黑丝在线一区二区三区|