Go to file
Lucas ea97f34398
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
Merge remote-tracking branch 'origin/Endabgabe' into Endabgabe
2024-07-04 16:49:27 +02:00
.gitea/workflows added maven test 2024-05-14 17:59:53 +02:00
.idea Huge Changes in TestFiles, ReflectionsTest, much more 2024-07-03 13:04:33 +02:00
.lib Doku, AllFeaturesClassExample not running!!! 2024-07-03 14:08:27 +02:00
src Merge remote-tracking branch 'origin/Endabgabe' into Endabgabe 2024-07-04 16:49:27 +02:00
.gitignore refactoring, readme 2024-07-04 16:49:14 +02:00
pom.xml E2E tests done 2024-07-04 15:22:05 +02:00
readme.md refactoring, readme 2024-07-04 16:49:14 +02:00

"Nicht Haskel 2.0" Java Compiler

Realisation of a subset of the Java Standard Compiler in the course Compiler Construction of the 4th semester Computer Science at the Duale Hochschule Stuttgart (Horb).

This project aims to provide a simplified version of the Java compiler, focusing on key language features and demonstrating the principles of compiler construction.

Realised Java syntax

  • Data types: int, boolean, char
  • Access modifier: public, protected, private
  • Operators: = + - * % / > < >= <= == != ! && || ++ --
  • Keywords: class, this, while, do, if, else, for, return, new, switch, case, break, default, :
  • Statements:
    • if ... if else ... else;
    • while ... ;
    • do ... while;
    • for;
    • switch ... case ... ;
  • Comments:
    • Single line: // comment
    • Multi-line: /* comment */
  • Further functions:
    • All methods are overloadable
    • High maintainability and expandability through implementation of the visitor pattern
    • Logging Input and Outputs
    • Error Handling in the Semantic Check

Project Structure

src/
└── main/
    ├── java/
    │   ├── ast/              -> Defining the structure of the AST
    │   ├── bytecode/         -> Generate Java bytecode
    │   ├── main/             -> Running the compiler
    │   ├── parser/
    │   │   ├── astBuilder/   -> Builder creating the AST
    │   │   ├── generated/    -> Antlr generated grammar
    │   │   └── grammar/      -> Antlr grammar
    │   ├── semantic/         -> Running the semantic check
    │   └── visitor/          -> Visitor interface
    └── resources/
test/
└── java/
│   ├── main/                 -> MainTest, E2ETests, UtilityTests
│   ├── parser/               -> Performs tests on the parser
│   └── semantic/             -> Performs tests on the semantic check
└── resources/                -> Ressources for running the Tests

Class-Diagramm AST

AST Diagramm

Used Tools

  • Maven 4.0
    • Used for automating the build process and managing dependencies.
  • ANTLR4 v.13.1
    • Used to parse the input Java code into the Abstract Syntax Tree.

How to run the compiler

Possibilities

1. Start miniCompiler using make:

Make needs to be installed

cd .\src\test\ ; make clean compile-miniCompiler

2. Start miniCompiler using jar:

If you do not have the .jar, download it here or compile it using mvn package or make first

java.exe -DgenJar=bool -DgenClass=bool -jar path_to_jar\jarName.jar 'path_to_input_file.java' 'path_to_output_directory'

Example (jar needs to be in the target directory)

 java.exe -DgenJar=true -DgenClass=true -jar .\target\JavaCompiler-1.0-jar-with-dependencies.jar 'src/main/resources/input/CompilerInput.java' 'src/main/resources/output'
  • set DgenJar true, to generate the jar, false for no jar
 DgenJar=true
  • set DgenClass true, to generate class files, false for no class files
 DgenClass=true

How to run tests

mvn test

Or start them manually in your IDE