|
CS 3721, Spring 2004 |
Recitation 7 must be submitted
following directions at: submissions on or before
|
You will now be using the full grammar from Recitation 5. (Below the part in bold red type is what needs to be implemented for this recitation.)
| Grammar for Tiny language |
|---|
M ---> { S } '$'
S ---> I | W | G | A | P | C
I ---> '[' E '?' { S } ':' { S } ']' | '[' E '?' { S } ']'
W ---> '{' E '?' { S } '}'
A ---> lower-case '=' E ';'
P ---> '<' E ';'
G ---> '>' lower-case ';'
C ---> '<' upper-case ';'
E ---> T {('+' | '-') T}
T ---> U {('*' | '/' | '%') U}
U ---> F '^' U | F
F ---> '(' E ')' | lower-case | digit
|
For example, suppose the input statement is:
> m;
# Read M[22] as integer
li $v0, 5
syscall
sw $v0, 88($s1)
For example, consider the following program, consisting mostly of just a simple while statement is:
n = 0;
{ n - 9 ?
n = n + 1;
< n; < N;
}
#
This could be translated to the following MIPS code,
with the key parts in red. All the black parts of the code
below will be generated by the code from the previous recitation.
### Compiled on: Tue Oct 01 13:57:32 CDT 2002
main: addu $s7, $ra, $zero
la $s1, M
### Start of compiled code
# M[23] = M[0]
lw $t1, 0($s1)
sw $t1, 92($s1)
WhileStart0:
# M[36] = M[23] - M[9]
lw $t1, 92($s1)
lw $t2, 36($s1)
sub $t3, $t1, $t2
sw $t3, 144($s1)
lw $t1, 144($s1)
beq $t1, $zero, WhileEnd0
# M[37] = M[23] + M[1]
lw $t1, 92($s1)
lw $t2, 4($s1)
add $t3, $t1, $t2
sw $t3, 148($s1)
# M[23] = M[37]
lw $t1, 148($s1)
sw $t1, 92($s1)
# Print M[23]
li $v0, 1
lw $a0, 92($s1)
syscall
# Print NewL as ASCII char
li $v0, 4
la $a0, NewL
syscall
j WhileStart0
WhileEnd0:
### End of complied code
addu $ra, $s7, $zero
jr $ra
.data
M: .word 0,1,2,3,4,5,6,7,8,9 # constants
.space 104 # variables a to z
.space 500 # temporaries
Blank: .asciiz " "
NewL: .asciiz "\n"
Tab: .asciiz "\t"
For example, suppose the input statement is:
[ f%2 ? < 1; : < 2; ]
This could be translated to the following MIPS code,
with the key parts in red:
# Start of if-then-else number 1
# M[39] = M[15] % M[2]
lw $t1, 60($s1)
lw $t2, 8($s1)
rem $t3, $t1, $t2
sw $t3, 156($s1)
lw $t1, 156($s1)
beq $t1, $zero, ThenEnd1
# Print M[1]
li $v0, 1
lw $a0, 4($s1)
syscall
j ElseEnd1
ThenEnd1:
# Print M[2]
li $v0, 1
lw $a0, 8($s1)
syscall
ElseEnd1:
| Sample Input 1 |
|---|
f = 0; g = 1; n = 0;
{ n - 8*5 ?
h = f + g;
< n; < B; < f; < B;
[ f%2 ? < 1; : < 2; ]
< N;
n = n + 1;
f = g; g = h;
} $
|
which should produce the output: here, or
| Sample Input 2 |
|---|
f = 1; g = 2; n = 3; > m;
{ m - n ?
< n; < T; < g; < T;
j = g; d = 2; t = 1;
{ t ?
[ j%d ? e = 0; : e = 1; ]
{ e ?
j = j/d; < d; < B;
[ j%d ? e = 0; : e = 1; ]
}
[ j - 1 ? t = 1; : t = 0; ]
[ d - 2 ? d = d + 2; : d = 3; ]
}
< N;
n = n + 1;
h = f + g;
f = g; g = h;
} $
|
which should produce the output: here
|
Contents of submission
for Recitation 7: Last Name, First Name; Course Number; Recitation Number (7). a. Java or C++ code for your translator, perhaps in multiple files. b. Results of runs of your program using sample inputs above, giving the complete resulting MIPS code. c. Results of executing the MIPS code in b using the SPIM simulator.
|