Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
DEPARTMENT OF COMPUTER SCIENCE SUMMATIVE COURSEWORK ASSIGNMENT BRIEF KEY INFORMATION • Weighting of the assignment: 30% • Page limit/word count: 5 pages A4 (excluding cover sheet) • Expected hours spent on this assignment: 10 hours in practicals + 10 hours independently • Items to be submitted: .tar.gz or .zip source code archive + PDF written report • Work to be submitted on-line via Blackboard Learn by: 12:00 midday on Fri 27th Mar 2020 • Work will be marked and returned by: Tue 21st Apr 2020 PLAGIARISM By submitting this assignment, you are certifying that it is all your own work. Any sentences, figures, tables, equations, code snippets, artworks and illustrations in this report must be original and must not have not been taken from any other person’s work, except where explicitly acknowledged, quoted, and referenced. You understand that failing to follow this requirement will be considered plagiarism. Plagiarism is a form of academic misconduct and will be penalised accordingly. The University’s Statement of Academic Misconduct is available on the University web pages. LATE SUBMISSION If your work is submitted after the deadline, 10% of the maximum possible mark will be deducted for each working day (or part thereof) it is late. A mark of zero will be awarded if your work is submitted more than 5 working days late. It is strongly recommended that you hand work in by the deadline as a late submission of one piece of work can have an impact on other work. If you believe that you have a valid reason for failing to meet a deadline, then you should complete an Extenuating Circumstances Form and submit it to the Student Support Centre before the deadline, or as soon as is practicable afterwards, explaining why. 1 1. ASSESSMENT CLASSIFICATIONS This coursework assesses your ability to understand, explain and modify a compiler. You will gain credit for: • writing code that compiles and: – correctly implements the features requested; – where requested, includes tests to check its correctness; – contains sensible comments and is easy to understand; – is elegant and idiomatic; • writing a report that: – explains what you did and why; – includes evidence (such as code excerpts and output from your program) to support your claims; – uses clear, correct English and is structured clearly. Your assignment will be marked according to the mark scheme outlined in Section 4. The mark scheme is designed so that the mark obtained in this way will correspond to the following qualitative degree classification descriptions: Degree Classification Description First Class (>= 70%) Excellent Upper Second Class (60-69%) Good Lower Second Class (50-59%) Satisfactory Third Class (40-49%) Poor Pass (35-39%) Very Poor Fail (0-34%) Inadequate 2 2. ASSIGNMENT DESCRIPTION SUMMARY You will be supplied with a simple compiler babycino for a subset of Java, similar to Appel and Palsberg’s subset MiniJava. The compiler supports boolean AND (&&), but not boolean OR (||). Modify the compiler to add support for ||. Test your compiler to check it works correctly. Write a report describing what you did and explaining why. Include listings of the code you modified in your report. In your PDF report, you must answer each subtask on a separate page and use at most one page for each subtask, except subtask 4, which may take 2 pages. You must submit a .tar.gz or .zip archive of your code as well as your report. You will be penalised severely for submitting code that does not compile. TASK DESCRIPTION The babycino compiler discussed in lectures supports boolean AND (&&), but does not support boolean OR (||). You will find an explanation of || in any Java language reference, but note the following: The binary operator || is left-associative and (point 1) has lower precedence than &&. The expression b1 || b2 evaluates to true if at least one of b1 and b2 is true; otherwise, (point 2) it evaluates to false. Note that, like &&, || short-circuits. If b1 is true, there is no need to evaluate b2 to determine the result. Therefore, the language guarantees: (point 3) that b1 is evaluated before b2; and (point 4) that if b1 is true, then b2 will not be evaluated. Your task is to add support for || to the compiler. You will need to consider carefully how best to modify each stage of the compiler (if at all). Subtask 1: Parsing (20%) Modify the compiler to parse || expressions. Make sure that your compiler conforms to points 1 in the specification above. In your report: 1. Show the code that you changed. (10%) 2. Explain the changes that you made. (5%) 3. Include a short, valid MiniJava program that contains a single || expression and a diagram of the parse tree generated by your compiler for that program. (5%) Subtask 2: Semantic analysis (20%) Ensure that your compiler rejects ill-formed || expressions. In your report: 1. Show the code that you changed. (10%) 2. Explain the changes that you made. (5%) 3 3. Include a short MiniJava program that contains an ill-formed || expression, which the compiler rejects during the semantic analysis phase. (5%) Subtask 3: Code generation (20%) Modify the compiler to generate code for || expressions. You might like to check that your compiler correctly evaluates || for different combinations of true and false. Make sure that your compiler conforms to points 2, 3 and 4 in the specification above. In your report: 1. Show the code that you changed. (10%) 2. Explain the changes that you made. (5%) 3. Include the unoptimised intermediate code generated by the compiler for the short MiniJava program in subtask 1. (5%) Subtask 4: Testing (20%) Write short MiniJava programs to test points 1, 2, 3 and 4 in the specification above. Each program should produce some output and terminate. In order to be a useful test for part of the specification, the output of the program should be different for a compiler that does not satisfy that part of the specification. In your report: 1. Show the code for the tests for each of the numbered specification points. (3% * 4) 2. State the expected output, both for a compiler that does satisfy the specification and one that does not. (2% * 4) If you are unsure what the correct behaviour of your compiler should be, you may find it helpful to recall that a MiniJava program should behave the same whether it is compiled by a MiniJava compiler or a Java compiler. If you find that your compiler does not behave as it ought to, fix it! Presentation of code archive and report (20%) This assignment is partly an exercise in technical report writing. Marks will be awarded for writing clear, correct English. Marks will also be awarded for structuring your report clearly with consistent use of style, but not for fancy formatting. With regard to the code archive, you should make sure you include the supplied scripts to build and test your compiler automatically. You should also follow a sensible naming convention for files and, where appropriate, organise your files neatly into different directories. Your archive should not include any temporary files or caches. The code itself should be sensibly formatted and commented. 4 ADDITIONAL INFORMATION Resources Supplied or Required You will be able to download the babycino compiler from Blackboard. The compiler uses the ANTLR parser generator from www.antlr.org. ANTLR and its libraries are included in the babycino archive, so you do not need to download them separately, but you may find it helpful to look at the ANTLR documentation. You may use workstations on campus or your own computer. Please take care to backup your work periodically. An easy way to achieve this is to use an online source control system, such as GitLab. The lecture notes on Blackboard provide an overview of how to write a compiler. You may also find the resources on the module reading list helpful. Practicals There are 5 x 2-hour practicals timetabled for completing this coursework. These will be held in Polly Vacher G56 on Tuesdays, 11:00-13:00, in Weeks 6-11 of term. You are advised to attend these practicals, as this will be the easiest way to obtain support. The lecturer and student demonstrators will be available to help. Please ask us if you are stuck. We will not tell you exactly what to do, but we will try to provide you with guidance. You may also wish to discuss the coursework with other students in practicals. This is both permitted and encouraged, but please remember that this is individual coursework. Every line of code you write and every sentence in your report must be your own work. Working together with a friend on the same computer or copying code (through any means) is likely to constitute plagiarism. To stay on target to submit by the deadline, you should aim to complete one task in every practical and finish writing up the corresponding page of the report before the following practical. You will then be able to seek guidance on any remaining problems in the final practical. Please ask questions about coursework in practicals if you can, but you are also welcome to ask questions during the lecturer’s drop-in office hours or, if he is available, after lectures. 5 3. ASSIGNMENT SUBMISSION REQUIREMENTS FRONT PAGE The first page of your submission should include the following information: • Module code: CS2CO16 • Assignment report title: Adding boolean OR to a compiler • Student Number (for example, 25098635): • Date of completion: • Actual time spent on the assignment (hours): • Assignment evaluation (3 key points): 1. 2. 3. We will use information about how long you spent on the assignment when we review and balance coursework between modules for later years. An exact answer is not necessary, but please try to give a reasonable approximation. The assignment evaluation is your opportunity to provide feedback on the assignment. We will use this to improve the coursework for next year. You might like to comment on the following: • Were any parts of the assignment particularly fun, interesting, boring or frustrating? • Was the assignment too long/short/easy/hard/about right? • Were there any obvious errors or technical problems with the materials supporting the assignment? You will not be penalised for making negative comments about the coursework assignment in the assignment evaluation. ASSIGNMENT CONTENT For this assignment, you are required to submit both a report and source code through Blackboard, following the instructions at the submission point. You should submit your report as a PDF and your code as a .tar.gz or .zip archive. Please check carefully that the code in your archive compiles. If your code does not compile, but can be made to do so with a minor modification, you will lose marks for code presentation. If your code still does not compile, you will score zero for all code components of the assignment, making your maximum possible mark around 50%. Answer each subtask on a separate page and use at most one page for each subtask, except for subtask 4, which may use 2 pages. If you fail to do so, you will lose marks for presentation. Furthermore, if your answer for a subtask is significantly longer than permitted, you will gain credit only for the first page of your answer. The minimum permissible font size for the body text of your report is 10 pt; 12 pt is recommended. For code excerpts, you will probably need to use a smaller font, which is fine.