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

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

代做Micro Language Compiler

時間:2024-02-07  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



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

掃一掃在手機打開當前頁
  • 上一篇:COM3524代做、代寫Java,Python編程設計
  • 下一篇:CISC3025代做、代寫Java,c++設計編程
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    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综合_亚洲视频一区二区三区
    亚洲男人的天堂在线aⅴ视频| 成人精品视频.| 欧美激情一区| 日韩欧美一级精品久久| 久久精品久久精品| 老鸭窝亚洲一区二区三区| 中文字幕一区二区三区av| 99免费精品视频| 欧美va在线播放| 成人午夜看片网址| 日韩欧美中文字幕一区| 麻豆精品在线播放| 日本精品一区二区三区四区的功能| 国产精品美日韩| 午夜国产精品视频免费体验区| 日韩午夜三级在线| 国产ts人妖一区二区| 欧美一区二区三区小说| 久久99国产精品尤物| 欧美亚洲愉拍一区二区| 爽好久久久欧美精品| 久久欧美肥婆一二区| 婷婷久久综合九色国产成人| 免费国产一区二区| 婷婷综合另类小说色区| 一本大道av伊人久久综合| 视频在线在亚洲| 日本大香伊一区二区三区| 日本一道高清亚洲日美韩| 91官网在线免费观看| 日本aⅴ亚洲精品中文乱码| 欧洲精品视频在线观看| 韩国三级电影一区二区| 91精品欧美一区二区三区综合在| 精品一区二区三区在线视频| 欧美久久高跟鞋激| 国产91在线观看丝袜| 精品久久一区二区三区| 欧美区亚洲区| 亚洲精品一卡二卡| 亚洲欧美精品| 激情综合网天天干| 日韩欧美中文字幕公布| 欧美性事免费在线观看| 久久精品国产亚洲aⅴ| 日韩一区二区三区视频| 色综合色狠狠综合色| 日本va欧美va欧美va精品| 日本一区二区三区在线不卡| 最近看过的日韩成人| 国产一区二区三区不卡在线观看| 日本一区二区成人| 欧美综合亚洲图片综合区| 久久国产精品无码网站| 一区二区高清视频在线观看| 日韩一区二区精品在线观看| 欧美理论在线播放| 91原创在线视频| 国模冰冰炮一区二区| 亚洲高清免费视频| 亚洲精品欧美综合四区| 国产精品素人视频| 91麻豆swag| 久久久另类综合| 这里只有精品视频在线观看| 一区二区av| 亚洲精品乱码| 在线不卡视频| 伊人影院久久| 国产精品99久久久久久久女警 | 精品粉嫩超白一线天av| 久久久福利视频| 精品捆绑美女sm三区| 亚洲国产成人tv| 欧美日韩天堂| 五月综合激情日本mⅴ| 久久九九电影| 狠狠爱综合网| 欧美一区二区三区免费大片| 久久本道综合色狠狠五月| 国产精品二区在线观看| 日本一道高清亚洲日美韩| 国产精品伦一区| 精品一二三四区| 国产乱妇无码大片在线观看| 99久久99久久精品免费看蜜桃| 激情小说欧美图片| 色婷婷激情综合| 国产精品亚洲午夜一区二区三区 | 国产精品乱码一区二区三区软件| 日韩精品色哟哟| 国产一区999| 欧美96一区二区免费视频| 婷婷综合在线观看| 国产一区二区三区无遮挡| 日韩欧美高清在线| 精品午夜久久福利影院| 国产精品一区一区| 成人高清伦理免费影院在线观看| 久久婷婷亚洲| 婷婷一区二区三区| 一本大道久久a久久综合| 欧美日韩精品欧美日韩精品一 | 国产精品丝袜91| 女人香蕉久久**毛片精品| 欧美一区二区私人影院日本| 精品国产伦理网| 亚洲国产一区二区视频| 国产美女在线精品| 一区三区视频| 久久精品日产第一区二区三区高清版 | 2024国产精品| 亚洲少妇最新在线视频| 久久精品国产澳门| 精品日韩一区二区三区| 91麻豆国产福利在线观看| 色综合色综合色综合| 国产曰批免费观看久久久| 成人免费在线播放视频| 欧美一区三区二区| 欧美影片第一页| 国产精品美女一区二区在线观看| 精品奇米国产一区二区三区| 欧美色电影在线| 91福利社在线观看| 国产老女人精品毛片久久| 欧美在线免费观看视频| 亚洲国产精品久久久久秋霞影院 | 在线播放一区| 国产精品毛片一区二区三区| 国产欧美一区二区在线| 欧美日韩高清在线播放| 黄色成人免费在线| 99精品热视频| 国产精品久久久久久久蜜臀| 91小视频免费看| 亚洲久草在线视频| 美女www一区二区| 国产伦精一区二区三区| 99久久国产综合色|国产精品| 国内一区二区三区| 亚洲黄色尤物视频| 欧美 亚欧 日韩视频在线| 久久综合久久综合久久| 亚洲五码中文字幕| 成人黄色一级视频| 色婷婷狠狠综合| 成人天堂资源www在线| 欧美视频观看一区| 狠狠色丁香九九婷婷综合五月| 欧美一区二区在线视频| 亚洲一区二区三区四区五区中文| 国产成人在线免费观看| 久久久精品国产免费观看同学| 日本欧美在线看| 日韩视频在线观看国产| 蜜臀av性久久久久av蜜臀妖精 | 欧美日韩在线观看一区二区| 国产成人精品一区二区三区四区| 国产三级一区二区| 成人激情小说网站| 欧美日韩国产一级| 美美哒免费高清在线观看视频一区二区 | 国产欧美日韩综合精品一区二区| 久久青青草综合| 亚洲一区二区高清| 悠悠资源网久久精品| 亚洲欧美自拍偷拍色图| 欧美剧在线免费观看网站| 青青草97国产精品免费观看无弹窗版| 国产午夜精品一区二区三区视频 | 色老汉av一区二区三区| 韩国久久久久| 91蝌蚪porny| 国产三级三级三级精品8ⅰ区| 精品电影一区| 欧美电影一区二区三区| 久久国产精品一区二区三区| 欧美日韩一区二区三| 91在线你懂得| 欧美日韩国语| 一区二区三区四区视频精品免费| 久久亚洲精品伦理| 免费观看91视频大全| 欧美日韩高清一区二区不卡| 噜噜噜久久亚洲精品国产品小说| 亚洲久久一区| 精品一区二区三区的国产在线播放| 亚洲综合在线五月| 欧美伦理电影网| 在线国产日韩| 欧美日韩综合精品| 免费精品99久久国产综合精品| 天堂久久久久va久久久久| 男人的天堂久久精品| 久色婷婷小香蕉久久| 国产精品动漫网站| 欧美三级视频在线观看| 亚洲高清视频在线观看| 亚洲一区二区三区欧美|