Update README.md
This commit is contained in:
50
README.md
50
README.md
@@ -5,11 +5,10 @@ This is the project for Klang - the Kaiser language.
|
|||||||
This code was in equal parts developed by `Dennis Kaiser` and `Marvin Kaiser` at the RheinMain University of Applied Sciences for the Compilers course.
|
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
|
# 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 -h`
|
example call to print help `java -cp target/klang-1.0-jar-with-dependencies.jar de.hsrm.compiler.Klang.Klang -h`
|
||||||
|
example call: `java -cp <jar> <cp> -out <input> <output>`
|
||||||
Arguments:
|
Arguments:
|
||||||
|
- -out <file> File to write to
|
||||||
- -h Print this help
|
- -h Print this help
|
||||||
- --evaluate: Evaluates the given source code
|
- --evaluate: Evaluates the given source code
|
||||||
- --pretty: Pretty print the given source code
|
- --pretty: Pretty print the given source code
|
||||||
@@ -23,8 +22,47 @@ The makefile can be used to perform various functions more easily:
|
|||||||
- `make pretty` prettifies code.k and writes to pretty.k
|
- `make pretty` prettifies code.k and writes to pretty.k
|
||||||
- `make eval` evaluates code.k
|
- `make eval` evaluates code.k
|
||||||
- `make test` runs tests from src/test/
|
- `make test` runs tests from src/test/
|
||||||
|
- `make testJava` runs JUnit tests
|
||||||
- `make cleanTests` cleans files generated from tests
|
- `make cleanTests` cleans files generated from tests
|
||||||
|
|
||||||
|
# Boilerplate Example
|
||||||
|
A simple program in the KLang Language consits of some struct definitions and some function definition and a single expression that is used as the start for the compilation
|
||||||
|
```
|
||||||
|
struct node {
|
||||||
|
value: int;
|
||||||
|
tail: node;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeList(anz: int): node {
|
||||||
|
if (anz == 0) {
|
||||||
|
return naught;
|
||||||
|
}
|
||||||
|
return create node(anz - 1, makeList(anz - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
function get(ll: node, index: int): int {
|
||||||
|
if (index == 0 || ll == naught) {
|
||||||
|
return ll.value;
|
||||||
|
} else {
|
||||||
|
return get(ll.tail, index - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sum(list: node, length: int): int {
|
||||||
|
if (length == 0) {
|
||||||
|
return list.value;
|
||||||
|
}
|
||||||
|
return list.value + sum(list.tail, length -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function init(pos: int): int {
|
||||||
|
let n: node = makeList(5);
|
||||||
|
return sum(n, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
init(0);
|
||||||
|
```
|
||||||
|
|
||||||
# Functionality
|
# Functionality
|
||||||
The KLang compiler supports generation of AMD64 assembly code, as well as prettifying and evaluating the KLang code.
|
The KLang compiler supports generation of AMD64 assembly code, as well as prettifying and evaluating the KLang code.
|
||||||
|
|
||||||
@@ -44,9 +82,9 @@ The following simple expressions are supported. Expressions need to be put in pa
|
|||||||
|
|
||||||
### Examples:
|
### Examples:
|
||||||
```
|
```
|
||||||
(5 + 4)
|
5 + 4
|
||||||
(8 % 2)
|
8 % 2
|
||||||
(8 == 0)
|
8 == 0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|||||||
Reference in New Issue
Block a user