Added project summary to readme
This commit is contained in:
113
README.md
113
README.md
@@ -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;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user