P1: Decaf Program
Objective
The goal of this project is to become familiar with the Decaf programming language.
Introduction
The semester-long project for this course is to build a compiler for the Decaf language. In this project, you will implement various functions in Decaf to become familiar with the language.
You should download the reference compiler from the "Files" tab in Canvas to test your submission for this project. Invoke it with the "-i" flag to run the interpreter:
java -jar decaf-1.0.jar -i <decaf-file>
You may wish to download the starter file with function stubs: pa01.decaf
You may edit Decaf code using the editor of your choice. If you use vim, you may wish to use the syntax highlighting provided by Zamua, a previous CS 432 student.
Assignment
Implement the following functions in Decaf:
int fact(int n)
Returns the factorial ofn
(i.e., "n!
"). For example, "fact(3)
" should return6
. You may assume 1 ≤ n ≤ 10.int fib(int n)
Returns then
th Fibonacci number. For example, "fib(1)
" should return1
and "fib(4)
" should return3
. You may assume 1 ≤ n ≤ 25.bool is_prime(int n)
Returnstrue
ifn
is prime, andfalse
otherwise. Performance is not a concern, so you may use a naive algorithm. You may assume 0 ≤ n ≤ 600.int sum_nums(int len)
Returns the sum oflen
numbers from an array callednums
. For example, "sum_nums(0)
" should return0
regardless of the contents ofnums
, and "sum_nums(2)
" should return the sum of the first two numbers. You may assume the array size does not exceed 100.void sort_nums(int len)
Sortslen
numbers from an array callednums
in ascending numerical order. Sorting should be done in-place. Performance is not a concern, so you may use any sorting algorithm you wish. You may assume the array size does not exceed 100.int gcd(int a, int b)
Returns the greatest common divisor ofa
andb
. For example, "gcd(8,12)
" should return4
. Performance is not a concern, so you may use a naive algorithm. You may assume 1 ≤ a,b, ≤ 200.void draw_triangle(int base)
Draw a simple text-based triangle using hash marks ('#
'). The base of the triangle should bebase
characters long and the triangle should be oriented upwards from the base. Each level of the triangle should decrease in width by two characters per level (one on each side). Every line should end with a newline character ('\n
'), but there should be no extra whitespace above or below the triangle or on its right side. You may assume 1 ≤ base ≤ 100. Examples:base=3: # ### base=4: ## #### base=9: # ### ##### ####### #########
Submission
Please submit your .decaf
file to the
appropriate assignment on Canvas by the due date indicated there.
Your decaf program should be self-contained and should implement all of the project specs described above. The majority of your project grade will be based on automated tests, but I also conduct a manual review of your code and may deduct points for major code style issues.
Code Reviews
One of the goals of this course is to encourage good software development practices, especially when building a large software system (such as a compiler). For this project, you will be assigned two other random students in the course. You must review their code and offer constructive feedback according to the given rubric.
Submit your review on Canvas by the Friday following this project's due date. Please submit your review as a comment (not an attached file).
Grading
Here is the grading breakdown for this project:
Automated tests | 80 |
Instructor review | 10 |
Peer review | 10 |
TOTAL | 100 |