2024-07-04 13:22:05 +00:00
# "Nicht Haskel 2.0" Java Compiler
2024-07-04 14:49:14 +00:00
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).
2024-07-04 13:22:05 +00:00
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
```plain
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 ](ast.png )
## Used Tools
- [Maven 4.0 ](https://maven.apache.org/index.html )
- Used for automating the build process and managing dependencies.
- [ANTLR4 v.13.1 ](https://www.antlr.org/ )
- Used to parse the input Java code into the Abstract Syntax Tree.
## How to run the compiler
2024-07-04 14:49:14 +00:00
### Possibilities
### 1. Start miniCompiler using make:
Make needs to be installed
```bash
cd .\src\test\ ; make clean compile-miniCompiler
```
### 2. Start miniCompiler using jar:
If you do not have the .jar, download it [here ](https://gitea.hb.dhbw-stuttgart.de/i22005/NichtHaskell2.0/src/branch/Endabgabe/src ) 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)
```bash
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
2024-07-04 13:22:05 +00:00
2024-07-04 14:49:14 +00:00
```
DgenJar=true
```
2024-07-04 13:22:05 +00:00
2024-07-04 14:49:14 +00:00
- set DgenClass true, to generate class files, false for no class files
```
DgenClass=true
```
## How to run tests
```bash
mvn test
```
Or start them manually in your IDE