Homework 2

This commit is contained in:
Carlos Galindo 2020-01-15 22:30:09 +01:00
commit bf60a078d7
Signed by: kauron
GPG key ID: 83E68706DEE119A3
64 changed files with 4786 additions and 1185 deletions

View file

@ -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>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Javali-HW1</name>
<name>Javali-HW2</name>
<comment></comment>
<projects>
</projects>

View 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

View file

@ -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

View file

@ -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]

View file

@ -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>

View 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();
}
}

View 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();
}
}

View file

@ -0,0 +1 @@
22

0
javali_tests/HW1_nop90/EightVariablesWrite.javali Normal file → Executable file
View file

View 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;

View 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;
}
}

View file

@ -0,0 +1,12 @@
class Base {
}
class Extends extends Base {
}
class Main {
void main() {
write(0);
writeln();
}
}

View 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();
}
}

View 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();
}
}

View 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();
}
}

View 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);}
}
}

View 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];
}
}

View 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;
}
}

View 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