Comments (43)
https://github.com/z22756392z/sp110b/wiki/homework.md
from sp110b.
dowhile
#include <assert.h>
#include "compiler.h"
int E();
void STMT();
void IF();
void BLOCK();
int tempIdx = 0, labelIdx = 0;
#define nextTemp() (tempIdx++)
#define nextLabel() (labelIdx++)
#define emit printf
int isNext(char *set) { //...}
int isEnd() { //...}
char *next() { //...}
char *skip(char *set) { //...}
// F = (E) | Number | Id
int F() { //...}
// E = F (op E)*
int E() { //...}
// ASSIGN = id '=' E;
void ASSIGN() { //...}
// WHILE = while (E) STMT
void WHILE() { //...}
// DO WHILE
void DO(){
int DoBegin = nextLabel();
int DoEnd = nextLabel();
emit("(L%d)\n", DoBegin);
skip("do");
STMT(); // block call STMTS , } to end
skip("while");
skip("(");
int e = E();
emit("if not T%d goto L%d\n", e, DoEnd);
skip(")");
skip(";"); // 需要過濾掉,不然一開始在main() 執行的 STMTS會觸發 ASSIGN() 裡面的 skip("=") 導致錯誤
emit("goto L%d\n", DoBegin);
emit("(L%d)\n", DoEnd);
}
// STMT = WHILE | BLOCK | ASSIGN
void STMT() {
if (isNext("do")){
DO();
}
else if(isNext("while"))
WHILE();
// else if (isNext("if"))
// IF();
else if (isNext("{"))
BLOCK();
else
ASSIGN();
}
// STMTS = STMT*
void STMTS() {//...}
// BLOCK = { STMTS }
void BLOCK() { //...}
// PROG = STMTS
void PROG() { //...}
void parse() {
printf("============ parse =============\n");
tokenIdx = 0;
PROG();
}
執行結果
============ parse =============
t0 = 0
s = t0
t1 = 1
i = t1
(L0)
t2 = s
t3 = i
t4 = t2 + t3
s = t4
t5 = i
t6 = 1
t7 = t5 + t6
i = t7
t8 = i
t9 = 10
t10 = t8 < t9
if not T10 goto L1
goto L0
(L1)
from sp110b.
from sp110b.
110910511 蘇郁晴
https://github.com/yucing/sp110b/wiki/e1.md
from sp110b.
110910513林孫全
https://github.com/Mocha777/sp110b/wiki/%E7%BF%92%E9%A1%8C1
from sp110b.
110910518 黃紹安
https://github.com/shaoan901226/sp/wiki/HOMEWORK1
from sp110b.
110910515 陳文吉
https://github.com/RyanChen-01/sp110b/wiki/hw1.md
from sp110b.
110910501 王澤瑋
https://github.com/nakirifumiya/sp110b/wiki/hw1
from sp110b.
from sp110b.
110910506林庭光
https://github.com/Lin610313/sp110b/wiki/work1.md
from sp110b.
from sp110b.
110910507 王證傑
https://github.com/stayjay/sp110b/wiki/homework1
from sp110b.
資工三 110810509 蘇乾羽
https://github.com/qweasd049564/sp110b/blob/master/hw/hw1.md
from sp110b.
from sp110b.
from sp110b.
資工二 110911542 邵南翔
https://github.com/zraiz/sp110b/blob/master/Homework/01/Homework01.md
from sp110b.
資工二 110910529 劉宸羽
https://github.com/yumao57/sp110b/wiki/%E7%BF%92%E9%A1%8C%E4%B8%80
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
資工二 110911543 何文旺
https://github.com/WForU/sp110b/wiki/HW1.md
from sp110b.
from sp110b.
資工二110910510吳昆儒
https://github.com/wukunru/sp110b/wiki/%E7%BF%92%E9%A1%8C1
from sp110b.
https://github.com/Uriel58/sp110b/wiki/do...while
資工二 110910503 林成也
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
from sp110b.
資工二 110910539 鄭智陽
https://github.com/OohelloworldoO/sp110b/wiki/exercise-1
from sp110b.
from sp110b.
from sp110b.
資工二 110910527 楊堤筑 習題1
from sp110b.
from sp110b.
from sp110b.
110910504趙唯安
https://github.com/wei-annn/sp110b/wiki/hw1.md
from sp110b.
Related Issues (20)
- 習題 2 : 請為 c6 編譯器加上 do ... while 語法的程式碼 HOT 42
- 系統程式 第 6 週 -- 簽到討論區 HOT 43
- 習題 3 : 請用 jit 的方法直接執行一個函數的機器碼 HOT 27
- 系統程式 第 7 週 -- 簽到討論區 HOT 43
- 系統程式 第 9 週 -- 簽到討論區 HOT 42
- 系統程式 第 10 週 -- 簽到討論區 HOT 38
- 系統程式 第 11 週 -- 簽到討論區 HOT 43
- 系統程式 第 12 週 -- 簽到討論區 HOT 39
- 系統程式 第 13 週 -- 簽到討論區 HOT 36
- 系統程式 第 14 週 -- 簽到討論區 HOT 37
- 系統程式 第 15 週 -- 簽到討論區 HOT 44
- 系統程式 第 16 週 -- 簽到討論區 HOT 14
- 系統程式 第 16 週 -- 簽到討論區 HOT 33
- 系統程式 第 17 週 -- 簽到討論區 HOT 38
- 系統程式 第 18 週 -- 簽到討論區 HOT 34
- 系統程式 第 2 週 -- 簽到討論區 HOT 52
- 系統程式 第 3 週 -- 簽到討論區 HOT 50
- 系統程式 第 4 週 -- 簽到討論區 HOT 47
- 系統程式 第 5 週 -- 簽到討論區 HOT 45
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sp110b.