From 11c8759dfd2b8ac6fb30a87a1a5a840088558e5d Mon Sep 17 00:00:00 2001 From: Marvin Kaiser Date: Tue, 14 Jan 2020 19:15:58 +0100 Subject: [PATCH] Added project summary to readme --- README.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 85421be..1f21f96 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,115 @@ # Klang - The Kaiser language This is the project for Klang - the Kaiser language. -0 is false \ No newline at end of file +# 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; +} + +``` +