Added project summary to readme

This commit is contained in:
Marvin Kaiser
2020-01-14 19:15:58 +01:00
parent 15128a8d75
commit 11c8759dfd

113
README.md
View File

@@ -1,4 +1,115 @@
# Klang - The Kaiser language
This is the project for Klang - the Kaiser language.
0 is false
# Authors
This code was in equal parts developed by `Dennis Kaiser` and `Marvin Kaiser` at the RheinMain University of Applied Sciences for the Compilers course.
# Usage
Pass source code via stdin
example call to print help `java -cp target/klang-1.0-jar-with-dependencies.jar de.hsrm.compiler.Klang.Klang`
Arguments:
- -h Print this help
- --evaluate: Evaluates the given source code
- --pretty: Pretty print the given source code
- --no-compile: Do not compile the source code
- --no-main: Do not generate main function, will be generated as 'start'. Useful for testing
The makefile can be used to perform various functions more easily:
- `make build` simply buildy the compiler
- `make clean` cleans up all generated output
- `make` generated code.s from code.k in root folder
- `make pretty` prettifies code.k and writes to pretty.k
- `make eval` evaluates code.k
- `make test` runs tests from src/test/
- `make cleanTests` cleans files generated from tests
# Functionality
The KLang compiler supports generation of AMD64 assembly code, as well as prettifying and evaluating the KLang code.
## Data Types
- Integer
## Simple Expressions
The following simple expressions are supported. Expressions need to be put in paranthesis. When using comparison operators, the expressions evaluate to 0 for false and 1 for true.
- Addition (+)
- Subtraction (-)
- Multiplication (*)
- Division (/)
- Modulo (%)
- Equality (==)
- Less Than (<)
- Less Than Or Equal (<=)
- Greater Than (>)
- Greater Than Or Equal (>=)
- Number Negation (-)
### Examples:
```
(5 + 4)
(8 % 2)
(8 == 0)
```
## Functions
Functions can be defined and called. A function call can be used like any other expression. Recusion is supported
### Examples
```
function fun(x, y, z) {
return x;
}
fun(1, 2, 3);
```
## Statements
Several statements are supported:
- if
- variable declaration
- variable assignment
- return
- while
- do while
- for
### Examples
```
function example(x, y, z) {
let a;
let b = 0;
if ((x == y)) {
a = y;
} else if ((x == z)) {
a = z;
} else {
return b;
}
return a;
}
function whileExample(end) {
let x = 0;
while ((x < end)) {
x = (x + 1);
}
return x;
}
function doWhileExample(end) {
let x = 0;
do {
x = (x + 1);
} while((x < end));
}
function forExample(end) {
let x = 0;
for (let i = 0; (i < end); i = (i + 1)) {
x = (x + 1);
}
return x;
}
```