首页 > > 详细

辅导Jack Compiler、讲解CBOK留学生、辅导C++语言、C++程序设计调试调试Matlab程序|辅导Web开发

Assignment 3 Description
Assignment 3 - Jack Compiler
Weighting and Due Dates
Marks for this assignment contribute 15% of the overall course mark.
Marks for functionality will be awarded automatically by the web submission system.
Due dates: Milestone - 11:55pm Friday of week 11, Final - 11:55pm Friday of week 12.
Late penalties: For each part, the maximum mark awarded will be reduced by 25% per day / part day late. If your mark is greater than the
maximum, it will be reduced to the maximum.
Core Body of Knowledge (CBOK) Areas: abstraction, design, hardware and software, data and information, and programming.
Project Description
In this assignment you will complete a variation of projects 10 and 11 in the nand2tetris course, reworked descriptions of Nand2Tetris Projects
10 and 11 are shown below. In particular, you will write the following programs that are used to implement different components of an optimising
Jack compiler that compiles a Jack class into Hack Virtual Machine (VM) code:
parser - this parses a Jack program and constructs an abstract syntax tree.
codegen - this takes an abstract syntax tree and outputs equivalent VM code.
pretty - this takes an abstract syntax tree and produces a carefully formatted Jack program.
optimiser-e* - this copies an abstract syntax tree and pre-evaluates expressions where possible.
optimiser-r^ - this copies an abstract syntax tree and removes redundant code.
SVN Repository
You must create a directory in your svn repository named: //cs/assignment3. This directory may only contain the following
files and sub-directories - the web submission system (https://cs.adelaide.edu.au/services/websubmission) will check this:
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 2/7
Makefile - this file is used by make to compile your submission - do not modify this file.
.cpp C++ source files - naming as specified below.
.h C++ include files - naming as specified below.
lib - this directory contains precompiled programs and components - do not modify this directory.
includes - this directory contains .h files for precompiled classes - do not modify this directory.
tests - this directory contains a test script and test data, you can add your own tests too.
parser - your implementation of the parser program.
codegen - a script to run your codegen program.
pretty - a script to run your pretty program.
optimiser-e - a script to run your optimiser-e program*.
optimiser-r - a script to run your optimiser-r program^.
Notes:
if the lib/*/lib.a files do not get added to your svn repository you will need explicitly add them and make another commit:
% svn add lib/*/lib.a
% svn commit -m adding-missing-libraries
if the real executable programs are added to your svn repository you will need to explicitly remove them and make another commit:
% svn rm lib/*/parser lib/*/codegen lib/*/pretty lib/*/optimiser-e lib/*/optimiser-r
% svn commit -m removing-executables
Notes:
*Only for students enrolled in the undergraduate offering, COMP SCI 2000.
^Only for students enrolled in the postgraduate offering, COMP SCI 7081.
Submission and Marking Scheme
This assignment has three assignments in the web submission system (https://cs.adelaide.edu.au/services/websubmission) named:
Assignment 3 - Milestone Submissions, Assignment 3 - Final Submissions - UG and Assignment 3 - Final Submissions - PG. The
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 3/7
assessment is based on "Assessment of Programming Assignments (https://myuni.adelaide.edu.au/courses/44936/pages/assessment-ofprogramming-assignments)
". A submission to any of these assignments in the web submission system
(https://cs.adelaide.edu.au/services/websubmission) will automatically result in a submission to the other assignments. This is to ensure that a
submission to the wrong assignment does not result in an accidental loss of marks.
Assignment 3 - Milestone Submissions: due 11:55pm Friday of week 11
The marks awarded by the web submission system (https://cs.adelaide.edu.au/services/websubmission) for Assignment 3 - Milestone
Submissions contribute up to 20% of your marks for assignment 3. Your milestone submission mark, after the application of late penalties, will
be posted to the myuni gradebook when the assignment marking is complete.
Your program must be written in C++ and it will be compiled using the Makefile and precompiled components in the lib directory. It will be
tested using Jack language programs that may or may not be syntactically correct. A wide range of tests may be run, including some
secret tests. Marks will only be awarded for tests requiring a working parser program. Note: you will get no feedback on the secret tests, even
if you ask!
Assignment 3 - Final Submissions: due 11:55pm Friday of week 12
Your final submission mark will be the geometric mean of the weighted marks awarded by the web submission system
(https://cs.adelaide.edu.au/services/websubmission/) for either Assignment 3 - Final Submissions - UG or Assignment 3 - Final Submissions
- PG, a mark for your logbook and a mark for your code. It will be limited to 20% more than the marks awarded by the web submission system
(https://cs.adelaide.edu.au/services/websubmission) . See "Assessment - Mark Calculations
(https://myuni.adelaide.edu.au/courses/44936/pages/assessment-mark-calculations) " for examples of how the marks are combined. Your final
submission mark, after the application of late penalties, will be posted to the myuni gradebook when the assignment marking is complete.
Your program must be written in C++ and it will be compiled using the Makefile and precompiled components in the lib directory. It will be
tested using Jack language programs that may or may not be syntactically correct. A wide range of tests may be run, including some
secret tests. Note: you will get no feedback on the secret tests, even if you ask!
Automatic Marking
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 4/7
The final submission marks awarded by the web submission system (https://cs.adelaide.edu.au/services/websubmission) for each component
program will be weighted as follows:
For students enrolled in COMP SCI 2000 Computer Systems:
Assignment 3 - Final Submissions - UG
parser - 30%
codegen - 40%
pretty - 10%
optimiser-e - 20%
For students enrolled in COMP SCI 7081 Computer Systems:
Assignment 3 - Final Submissions - PG
parser - 30%
codegen - 40%
pretty - 10%
optimiser-r - 20%
Logbook Marking
Important: the logbook must have entries for all work in this assignment, including your milestone submissions and all of the component
programs. All the logbook links in the web submission system (https://cs.adelaide.edu.au/services/websubmission) assignments for
Assignment 3 point to the same shared logbook. See "Assessment - Logbook Review
(https://myuni.adelaide.edu.au/courses/44936/pages/assessment-logbook-review) " for details of how your logbook will be assessed.
Code Review Marking
For each of your programming assignments you are expected to submit well written code. See "Assessment - Code Review
(https://myuni.adelaide.edu.au/courses/44936/pages/assessment-code-review) " for details of how your code will be assessed.
Assignment 3 - Participation Marks
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 5/7
Any submissions to the final submissions assignment made more than two weeks before but less than three weeks before the due date for the
final submissions assignment, may be awarded participation marks. The participation marks will be calculated by scaling the best mark awarded
by the automatic marking of an eligible submission during this week to be a number between 0 and 10.
Any submissions to the final submissions assignment made more than one week before but less than two weeks before the due date for the final
submissions assignment, may be awarded participation marks. The participation marks will be calculated by scaling the best mark awarded by
the automatic marking of an eligible submission during this week to be a number between 0 and 10.
A maximum of 20 participation marks are available.
Nand2Tetris Projects 10 & 11: Compiler I & II
Background
Modern compilers, like those of Java and C#, are multi-tiered: the compiler's front-end translates from the high-level language to an intermediate
VM language; the compiler's back-end translates further from the VM language to the native code of the host platform. In an earlier workshop we
started building the back-end tier of the Jack Compiler (we called it the VM Translator); we now turn to the construction of the compiler's frontend.
This construction will span two parts: syntax analysis and code generation.
Objective
In this project we build a Syntax Analyser that parses Jack programs according to the Jack grammar, producing an abstract syntax tree that
captures the program's structure. We then write separate logic that can apply any number of transformations to our abstract syntax tree. The
transformations may include pretty printing the original program, applying specific optimisations to the abstract syntax tree or generating VM
code. This mirrors the approaches used in the workshops.
Resources
The relevant reading for this project is Chapters 10 and 11. However, you should follow the program structure used in earlier workshops rather
than the proposed structure in Chapters 10 and 11. You must write your programs in C++. You should use the Linux command diff to
compare your program outputs to the example output files supplied by us. A set of precompiled classes similar to those used in the workshops
and the previous assignment are in the zip file attached below. All the test files and test scripts necessary for this project are available in the zip
file attached below.
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 6/7
Testing and IO
We have a provided a description of the requirements for each component program on its own page. This includes instructions on how to
compile, run and test each component program. However before starting work on any of the component programs you should review the pages
on Testing and IO Controls.
Testing
The test data including the convention used to name expected outputs for each test are described on the Assignment 3 | testing
(https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-testing) page.
IO Controls
Each component program has specific requirements for what it should or should not output when it is working correctly and what to do when an
error occurs. Unfortunately, this can make it difficult to trace the execution of your programs and get meaningful error messages from them
during development. To allow you to achieve both, a number of output buffering and error reporting functions have been provided and are
described on the Assignment 3 | io controls (https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-io-controls) page.
Component Programs
parser
The parser program uses the provided tokeniser to parse a Jack program and construct an equivalent abstract syntax tree. The specific
requirements for this component program are described on the Assignment 3 | parser
(https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-parser) (https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-
%7C-parser) page.
codegen
The codegen program traverses an abstract syntax tree to generate virtual machine code. The specific requirements for this component
program are described on the Assignment 3 | codegen (https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-codegen) page.
pretty
10/20/2019 Assignment 3 Description: Computer Systems (2000_7081 Combined)
https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-description 7/7
The pretty program traverses an abstract syntax tree produced and prints a Jack program formatted to a specific coding standard. The specific
requirements for this component program are described on the Assignment 3 | pretty
(https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-pretty) page.
optimiser-e*
The optimiser-e program traverses an abstract syntax tree produced and generates a new abstract syntax tree with all expressions preevaluated
if possible. The specific requirements for this component program are described on the Assignment 3 | optimiser_e
(https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-optimiser-e) page.
optimiser-r^
The optimiser-r program traverses an abstract syntax tree produced and generates a new abstract syntax tree with redundant program
elements removed. The specific requirements for this component program are described on the Assignment 3 | optimiser_r
(https://myuni.adelaide.edu.au/courses/44936/pages/assignment-3-%7C-optimiser-r) page.
Startup Files
The startup files should work on most 64-bit Linux systems and on a Mac. Please see the Startup Files for Workshops and Assignments
(https://myuni.adelaide.edu.au/courses/44936/pages/startup-files-for-workshops-and-assignments) page for more information.
assignment-compiler.zip (https://myuni.adelaide.edu.au/courses/44936/files/5403705/download?wrap=1)

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!