forked from DennisTT/cpsc411project5
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.html
186 lines (185 loc) · 9.28 KB
/
readme.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>CS411 - MiniJava Project</title>
<style type="text/css">
p, table, li, h1, h2, h3 {
font-family: verdana,arial,'sans serif';
}
p, h1, h2, h3, table, li, hr {
margin-left: 10pt;
}
body {
}
p, li {
font-size: smaller;
}
pre {
margin-left: 30pt;
}
</style></head>
<body>
<h1>CPSC 411 - MiniJava</h1>
<p>The course project for CPSC 411 is implementing a compiler for a
subset of the Java language called MiniJava. This document provides
some general information about the project and the MiniJava language.</p><p>The
project will proceed in several stages. Each stage corresponds to work
described in a number of Chapters from the textbook. Tentatively the
stages are planned as follows: </p><ol><li><a href="readme-project-1.html">Syntax analysis</a>: Using JavaCC implement a Scanner and a Parser that creates an AST. (Chapters 2, 3, 4)</li><li><a href="readme-project-2.html">Semantic Analysis</a> (Type Checking and Scope Checking): Chapter 5</li><li><a href="readme-project-3.html">Intermediate Code Generation</a>: Chapters 6, 7, 8.</li><li><a href="readme-project-4.html">Instruction Selection</a>: Chapter 9.</li><li><a href="readme-project-5.html">Control Flow and Data Flow Analysis</a>: Chapter 10.</li><li><a href="readme-project-6.html">Register Allocation and Code Emission</a>: Chapters 11, 12.</li></ol><p>Links providing details for each stage will be added above as the project progresses. </p><h2>The MiniJava Language</h2><p>The language that you will implement is a subset of Java called MiniJava. MiniJava is described in the<a href="http://www.cambridge.org/resources/052182060X/"> textbook's online material</a>) and in the appendix of the textbook. We repeat the most important information here.</p><p>MiniJava is a subset of Java. The meaning of a MiniJava program
is given by its meaning as a Java program. Overloading is not allowed
in MiniJava. The MiniJava statement <span style="font-family: monospace;">System.out.println( ... )</span>; can
only print integers. The MiniJava expression <span style="font-family: monospace;">e.length</span> only applies
to expressions of type <span style="font-family: monospace;">int[] </span>and only arrays of type <span style="font-family: monospace;">int[]</span> are supported. </p><p>When in doubt about the semantics of a given construct, you should consult the<a href="http://java.sun.com/docs/books/jls/"> Java Language Specification</a> for details. The <a href="http://java.sun.com/docs/books/jls/first_edition/html/index.html">first edition of the Java Language Specification</a>
will be the most useful since MiniJava does not support any of the
features added in later editions of the Java specification such as
inner classes and generics.</p><p><span style="font-family: verdana,arial,'sans serif';"></span>The
grammar in EBNF notation for MiniJava is given below. Note that this is
an abstract grammar. For example, the grammar is ambiguous about the precedence
and associativity of operators. You will have to resolve these
ambiguities when developing your parser. Consult the <a href="http://java.sun.com/docs/books/jls/">Java Language Specification</a> when in doubt.</p><table><tbody><tr><td align="right" valign="baseline"><p>Goal</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>MainClass ( ClassDeclaration )* <EOF></p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>MainClass</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>"class" Identifier "{" "public" "static" "void" "main" "(" "String" "[" "]" Identifier ")" "{" Statement "}" "}"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>ClassDeclaration</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>"class" Identifier ( "extends" Identifier )? "{" ( VarDeclaration | MethodDeclaration )* "}"</p> </td>
</tr>
<tr>
<td align="right" valign="baseline"><p>VarDeclaration</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>Type Identifier ";"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>MethodDeclaration</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>"public" Type Identifier "(" FormalList ) "{ VarDeclaration* Statement )* "return" Expression ";" "}"</p> </td>
</tr>
<tr><td><p>FormalList</p></td><td><p>::=</p></td><td><p>( Type Identifier ( "," Type Identifier )* )?</p></td></tr><tr>
<td align="right" valign="baseline"><p>Type</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>"int" "[" "]"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"boolean"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"int"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Identifier</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>Statement</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>"{" ( Statement )* "}"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"if" "(" Expression ")" Statement "else" Statement</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"while" "(" Expression ")" Statement</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"System.out.println" "(" Expression ")" ";"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Identifier "=" Expression ";"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Identifier "[" Expression "]" "=" Expression ";"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>Expression</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p>Expression ( "&&" | "<" | "+" | "-" | "*" ) Expression</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Expression "[" Expression "]"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Expression "." "length"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Expression "." Identifier "(" ( Expression ( "," Expression )* )? ")"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p><INTEGER_LITERAL></p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"true"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"false"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>Identifier</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"this"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"new" "int" "[" Expression "]"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"new" Identifier "(" ")"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"!" Expression</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p></p></td>
<td align="center" valign="baseline"><p>|</p></td>
<td align="left" valign="baseline"><p>"(" Expression ")"</p></td>
</tr>
<tr>
<td align="right" valign="baseline"><p>Identifier</p></td>
<td align="center" valign="baseline"><p>::=</p></td>
<td align="left" valign="baseline"><p><IDENTIFIER></p></td></tr></tbody></table><br><h2>Lateness Policy and Penalties</h2><p>The
following table shows the late penalties.
</p><ul><li>
1 Day -- 10%</li><li>
2 Days -- 30%</li><li>
3 Days -- 50%</li><li>
More than 3 days late - don't bother</li></ul><span style="font-family: verdana,arial,'sans serif';"><span style="font-weight: bold;"></span></span></body></html>