Homework 2
This commit is contained in:
parent
12f678a924
commit
bf60a078d7
64 changed files with 4786 additions and 1185 deletions
|
|
@ -2,10 +2,9 @@
|
|||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="test"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="lib" path="lib/antlr-4.4-complete.jar"/>
|
||||
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
|
||||
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
|
||||
<classpathentry kind="lib" path="lib/javaliParserObf.jar"/>
|
||||
<classpathentry kind="lib" path="lib/antlr-4.7.1-complete.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
|
|||
2
.project
2
.project
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Javali-HW1</name>
|
||||
<name>Javali-HW2</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
|
|
|
|||
13
.settings/com.github.jknack.antlr4ide.Antlr4.prefs
Normal file
13
.settings/com.github.jknack.antlr4ide.Antlr4.prefs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
antlr4.antlrRegisteredTools=4.4@/tmp/antlr-4.4-complete.jar\:4.7.1@/home/carlos/eth/cd/nop90/HW2/lib/antlr-4.7.1-complete.jar
|
||||
antlr4.antlrToolPath=/home/carlos/eth/cd/nop90/HW2/lib/antlr-4.7.1-complete.jar
|
||||
antlr4.encoding=UTF-8
|
||||
antlr4.listener=true
|
||||
antlr4.visitor=false
|
||||
antlr4.vmArgs=
|
||||
antlr4ide.is_project_specific=true
|
||||
autobuilding=true
|
||||
eclipse.preferences.version=1
|
||||
is_project_specific=
|
||||
outlet.DEFAULT_OUTPUT.cleanupDerived=true
|
||||
outlet.DEFAULT_OUTPUT.derived=true
|
||||
outlet.DEFAULT_OUTPUT.directory=./target/generated-sources/antlr4
|
||||
|
|
@ -1,12 +1,7 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
Grade: 24/25
|
||||
Grade: 29/30
|
||||
|
||||
31/31 tests passed [20/20]
|
||||
251/251 tests passed [25/25]
|
||||
|
||||
Submitted test cases [4/5]
|
||||
Submitted test cases: [4/5]
|
||||
38
build.xml
38
build.xml
|
|
@ -1,4 +1,4 @@
|
|||
<project name="compiler-design" default="compile" basedir="." xmlns:jacoco="antlib:org.jacoco.ant">
|
||||
<project name="compiler-design" default="generate-parser" basedir="." xmlns:jacoco="antlib:org.jacoco.ant">
|
||||
|
||||
<!-- A very simple ant file that primarily exists to run cup and lex;
|
||||
it also includes targets to build the compiler and run tests for those
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<property name="build.dir" value="${basedir}/bin"/>
|
||||
<property name="junit.jar" value="${basedir}/lib/junit-4.12.jar"/>
|
||||
<property name="hamcrest.jar" value="${basedir}/lib/hamcrest-core-1.3.jar"/>
|
||||
<property name="antlr.jar" value="${basedir}/lib/antlr-4.4-complete.jar"/>
|
||||
<property name="antlr.jar" value="${basedir}/lib/antlr-4.7.1-complete.jar"/>
|
||||
<property name="antlr.profile" value="false"/>
|
||||
<property name="antlr.report" value="false"/>
|
||||
<property name="jacocoant.jar" value="${basedir}/lib/jacocoant.jar"/>
|
||||
|
|
@ -21,16 +21,42 @@
|
|||
<property name="min.coverage" value="0.5"/>
|
||||
<property name="coverage.check" value="cd.frontend.*:cd.backend.*"/>
|
||||
|
||||
<target name="generate-parser">
|
||||
<echo message="ANTLR4 ${parser.dir}/Javali.g4" level="info"/>
|
||||
<echo>${basedir}</echo>
|
||||
<java classname="org.antlr.v4.Tool" failonerror="true" classpath="${antlr.jar}">
|
||||
<arg value="${parser.dir}/Javali.g4" />
|
||||
<arg value="-o" />
|
||||
<arg value="${parser.dir}" />
|
||||
<arg value="-no-listener" />
|
||||
<arg value="-visitor" />
|
||||
</java>
|
||||
|
||||
</target>
|
||||
|
||||
<!-- Deletes the generated ANTLR parser files. Don't use in HW1! -->
|
||||
<target name="clean-parser">
|
||||
<delete file="${parser.dir}/Javali.tokens"/>
|
||||
<delete file="${parser.dir}/JavaliLexer.java"/>
|
||||
<delete file="${parser.dir}/JavaliParser.java"/>
|
||||
<delete file="${parser.dir}/JavaliWalker.tokens"/>
|
||||
<delete file="${parser.dir}/JavaliWalker.java"/>
|
||||
<delete file="${parser.dir}/JavaliBaseListener.java"/>
|
||||
<delete file="${parser.dir}/JavaliBaseVisitor.java"/>
|
||||
<delete file="${parser.dir}/JavaliListener.java"/>
|
||||
<delete file="${parser.dir}/JavaliVisitor.java"/>
|
||||
<delete file="${parser.dir}/JavaliLexer.tokens"/>
|
||||
<delete file="${parser.dir}/Javali.interp"/>
|
||||
<delete file="${parser.dir}/JavaliLexer.interp"/>
|
||||
</target>
|
||||
|
||||
<!-- Cleans generated code, but NOT the parser source! -->
|
||||
<target name="clean">
|
||||
<delete dir="${build.dir}"/>
|
||||
</target>
|
||||
|
||||
|
||||
<!-- Builds the compiler framework for HW1. -->
|
||||
<target name="compile">
|
||||
<!-- Builds the compiler framework for HW > HW1. -->
|
||||
<target name="compile" depends="generate-parser">
|
||||
<mkdir dir="${build.dir}"/>
|
||||
|
||||
<javac debug="true" destdir="${build.dir}" includeantruntime="false">
|
||||
|
|
@ -40,7 +66,6 @@
|
|||
<pathelement location="${antlr.jar}"/>
|
||||
<pathelement location="${junit.jar}"/>
|
||||
<pathelement location="${hamcrest.jar}"/>
|
||||
<pathelement location="${parser.jar}"/>
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
|
@ -83,5 +108,4 @@
|
|||
<fail if="tests-failed" />
|
||||
</target>
|
||||
|
||||
|
||||
</project>
|
||||
|
|
|
|||
18
javali_tests/HW1/Multiplication.javali
Normal file
18
javali_tests/HW1/Multiplication.javali
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class Main {
|
||||
void main() {
|
||||
int r1;
|
||||
int i0, i1;
|
||||
|
||||
i0 = 5;
|
||||
i1 = 2;
|
||||
|
||||
r1 = i1 * 3;
|
||||
write(r1); writeln();
|
||||
|
||||
r1 = i0 * i1;
|
||||
write(r1); writeln();
|
||||
|
||||
r1 = r1 * i0 * i1 * 3;
|
||||
write(r1); writeln();
|
||||
}
|
||||
}
|
||||
15
javali_tests/HW1/ReadWrite.javali
Normal file
15
javali_tests/HW1/ReadWrite.javali
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/* Test read/write native functions */
|
||||
class Main {
|
||||
void main() {
|
||||
int r1, r2;
|
||||
int i0, i1, i2;
|
||||
|
||||
i0 = 5;
|
||||
i1 = read();
|
||||
|
||||
r1 = i0 + i1;
|
||||
write(r1); writeln();
|
||||
|
||||
write(r1 - 3); writeln();
|
||||
}
|
||||
}
|
||||
1
javali_tests/HW1/ReadWrite.javali.in
Normal file
1
javali_tests/HW1/ReadWrite.javali.in
Normal file
|
|
@ -0,0 +1 @@
|
|||
22
|
||||
0
javali_tests/HW1_nop90/EightVariablesWrite.javali
Normal file → Executable file
0
javali_tests/HW1_nop90/EightVariablesWrite.javali
Normal file → Executable file
|
|
@ -14,7 +14,7 @@ class Main {
|
|||
write(x); writeln();
|
||||
|
||||
/* performe some operation that should generate an int overflow */
|
||||
x = 2147483640;
|
||||
x = 21474836400;
|
||||
y = 60000;
|
||||
write( x + y); writeln();
|
||||
z = 20000000;
|
||||
|
|
|
|||
10
javali_tests/HW2/ErrWhileMissingBrace.javali
Normal file
10
javali_tests/HW2/ErrWhileMissingBrace.javali
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class Main {
|
||||
void main() {
|
||||
int i;
|
||||
|
||||
// Note: In Javali, while() loops must have braces ({}) after them,
|
||||
// so this is an expected syntax error.
|
||||
while(true)
|
||||
i = 1;
|
||||
}
|
||||
}
|
||||
12
javali_tests/HW2/OkInheritance.javali
Normal file
12
javali_tests/HW2/OkInheritance.javali
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class Base {
|
||||
}
|
||||
|
||||
class Extends extends Base {
|
||||
}
|
||||
|
||||
class Main {
|
||||
void main() {
|
||||
write(0);
|
||||
writeln();
|
||||
}
|
||||
}
|
||||
22
javali_tests/HW2/OkSimpleObject.javali
Normal file
22
javali_tests/HW2/OkSimpleObject.javali
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
class Main {
|
||||
|
||||
int field;
|
||||
|
||||
void method() {
|
||||
write(this.field);
|
||||
writeln();
|
||||
}
|
||||
|
||||
void method(int withArg) {
|
||||
write(withArg);
|
||||
writeln();
|
||||
}
|
||||
|
||||
void main() {
|
||||
this.field = 3;
|
||||
method(field);
|
||||
method(3);
|
||||
method(this.field);
|
||||
method();
|
||||
}
|
||||
}
|
||||
22
javali_tests/HW2/OkSimpleReturn.javali
Normal file
22
javali_tests/HW2/OkSimpleReturn.javali
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
class Main {
|
||||
|
||||
int m() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
int res;
|
||||
res = -1;
|
||||
|
||||
res = m();
|
||||
write(res);
|
||||
writeln();
|
||||
|
||||
res = this.m();
|
||||
write(res);
|
||||
writeln();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
27
javali_tests/HW2/OkSimpleReturnWithExpression.javali
Normal file
27
javali_tests/HW2/OkSimpleReturnWithExpression.javali
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
class Main {
|
||||
|
||||
int m(int a, int b) {
|
||||
return a + b + 1;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
int res;
|
||||
res = -1;
|
||||
|
||||
res = m(1, 2);
|
||||
write(res);
|
||||
writeln();
|
||||
|
||||
res = this.m(1, 2);
|
||||
write(res);
|
||||
writeln();
|
||||
|
||||
write(m(1, 2));
|
||||
writeln();
|
||||
|
||||
write(this.m(1, 2));
|
||||
writeln();
|
||||
|
||||
}
|
||||
}
|
||||
24
javali_tests/HW2_nop90/Arrays.javali
Normal file
24
javali_tests/HW2_nop90/Arrays.javali
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/* testing arrays with primitive types as well as new objects
|
||||
the if/else statements shows that the array is boolean array is initialized with false
|
||||
*/
|
||||
class Main {
|
||||
void main() {
|
||||
int [] testArray;
|
||||
boolean [] boolarray;
|
||||
|
||||
boolarray = new boolean [3];
|
||||
testArray = new int [10];
|
||||
|
||||
testArray[5] = 3;
|
||||
boolarray[1] = true;
|
||||
|
||||
if (boolarray[0]){
|
||||
write(1);}
|
||||
else{
|
||||
write(5);}
|
||||
writeln();
|
||||
if (boolarray[1]){
|
||||
write(1);}
|
||||
|
||||
}
|
||||
}
|
||||
12
javali_tests/HW2_nop90/Assignments.javali
Normal file
12
javali_tests/HW2_nop90/Assignments.javali
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
/* testing assign statements*/
|
||||
class Main {
|
||||
void main() {
|
||||
a = read();
|
||||
b = methodCall();
|
||||
c = methodCall(param1, param2);
|
||||
d = object.access;
|
||||
e = new Ast();
|
||||
d = new int[size];
|
||||
f = new Object[size];
|
||||
}
|
||||
}
|
||||
16
javali_tests/HW2_nop90/Casts.javali
Executable file
16
javali_tests/HW2_nop90/Casts.javali
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
/* testing casting as well as creating new Objects*/
|
||||
class Main
|
||||
{
|
||||
void main()
|
||||
{
|
||||
int a;
|
||||
int b;
|
||||
Object c;
|
||||
Object d;
|
||||
|
||||
c = null;
|
||||
d = new Object();
|
||||
a = 10;
|
||||
c = (Object) d;
|
||||
}
|
||||
}
|
||||
21
javali_tests/HW2_nop90/Division.javali
Executable file
21
javali_tests/HW2_nop90/Division.javali
Executable file
|
|
@ -0,0 +1,21 @@
|
|||
class Main {
|
||||
void main() {
|
||||
int a, b, c, d, e;
|
||||
|
||||
a = 10;
|
||||
b = -1;
|
||||
c = 0;
|
||||
d = 100;
|
||||
e = 2;
|
||||
|
||||
write(a / b); writeln();
|
||||
write(d / e); writeln();
|
||||
write(c / d); writeln();
|
||||
write(b / a + c); writeln();
|
||||
write(d / e * a / b * c); writeln();
|
||||
write(d / e * a / b); writeln();
|
||||
write(d / e + a / b); writeln();
|
||||
write(d / e * a * b * c); writeln();
|
||||
write(d / e * a - b + c); writeln();
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue