Compoiler
Mini-Java compiler written in Haskell.
Build
From the repository root:
make build
This builds:
src/Main(compiler binary)Runner.class(Java execution harness)
Compile a Java file
./src/Main src/Testsuite/javaFiles/ArithmeticTest.java
Generated class files are written to out/.
Runner usage
Runner loads classes from a directory, instantiates the class (constructor with fewest params, default values), prints declared fields, and can optionally invoke public methods.
Basic usage:
java Runner <ClassName> [classesDir]
classesDirdefaults toout
Invoke public methods:
java Runner <ClassName> [classesDir] --invoke-public
Provide shared method args (comma-separated):
java Runner <ClassName> [classesDir] --invoke-public --method-args=v1,v2,...
Restrict invocation to specific method names:
java Runner <ClassName> [classesDir] --invoke-public --only-methods=m1,m2,...
Example:
java Runner LoopTest out --invoke-public --only-methods=factorial --method-args=4
TestDriver usage
After all the Test-Cases are Compiled you can run the following Command:
javac -cp out/javac:. TestDriver.java
java -cp .:out/javac TestDriver
Test suite
Static tests
Run all static checks:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs
Run one test:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs WhileTest
Dynamic mode
Dynamic mode runs only the alternative classfile-derived checks.
Run all:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --dynamic
Run one:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --dynamic WhileTest
E2E mode
E2E mode runs compile-and-execute comparison between:
- Compoiler output in
out/ javacoutput inout/javac
Run all:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e
Run one:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e WhileTest
E2E with method invocation:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e --e2e-invoke-public WhileTest
E2E with method args:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e --e2e-invoke-public --e2e-method-args=3 AllSyntaxTest
E2E invoking only selected methods:
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e --e2e-invoke-public --e2e-only-methods=factorial LoopTest
runghc -isrc src/Testsuite/ExecutableTests/Main.hs --e2e --e2e-invoke-public --e2e-only-methods=factorial --e2e-method-args=4 LoopTest