Kipper Compiler
The Kipper Compiler is a TypeScript-based compiler that can compile Kipper code into TypeScript and generate the required overhead for the Kipper program. (In the future, native JavaScript should be supported as well. See #32 for more information.)
Kipper API
Kipper provides a TypeScript API for interacting with its compiler, which can be used to configure and inspect the compilation of a program. This API is per default shipped with the @kipper/core package and the kipper-standalone.js file.
Configuring the Kipper Compiler
Configuring KipperCompile.compile() can be done using the CompileConfig interface, which defines all available parameters for a compilation.
Kipper Compiler Parameters
| Parameter | Type | Description |
|---|---|---|
| fileName | string |
The name of the file. Per default
anonymous-script.
|
| target | KipperTarget |
The Kipper target instance, which defines the translation behaviour of the Kipper AST
nodes. Per default TypeScriptTarget.
|
| optimisationOptions | OptimisationOptions |
The options for optimising the Kipper output. Defaults to an object with the following values:
More info down below in Kipper Optimiser Parameters. |
| extendBuiltIns | Array<BuiltInFunction> | Additional built-in functions that should be available in the Kipper program. This extends builtIns and is per default empty. |
| builtIns | Array<BuiltInFunction> | Standard built-in functions that should be available in the Kipper program. If this is defined with new built-in functions that Kipper does not implement per default, the Kipper target class will have to be updated as well to implement the generation of these built-ins. Defaults to the function as listed in Built-in Functions. |
Kipper Optimiser Parameters
| Parameter | Type | Description |
|---|---|---|
| optimiseInternals | boolean |
If set to true, the internal functions (functions generated by the Kipper compiler to
provide specific functionality) of the compiled code will be optimised using
tree-shaking reducing the size of the output. Defaults to true.
|
| optimiseBuiltIns | boolean |
If set to true, the
built-in functions
of the compiled code will be optimised using tree-shaking reducing the size of the
output. Defaults to false.
|
Example Configuration
import { KipperCompiler } from "@kipper/core";
import { TypeScriptTarget } from "@kipper/core/lib/targets/typescript";
const compiler = new KipperCompiler();
const result = compiler.compile(
kipperCode, // A string or a KipperParseStream containing the source code
{
fileName: "myProgram.kip",
target: new TypeScriptTarget(),
optimisationOptions: {
optimiseInternals: true, // Removes any unused internal function
optimiseBuiltIns: true, // Removes any unused built-in function
},
},
);
Kipper CLI Parameters
Parameters for the Kipper Compiler CLI in the console.
| Flags | Description |
|---|---|
| -b, --[no-]optimise-builtins | If set to true, the built-in functions of the compiled code will be optimised using tree-shaking reducing the size of the output. |
| -e, --encoding=encoding |
The encoding that should be used to read the file (ascii,utf8,utf16le). Defaults to
utf8.
|
| -i, --[no-]optimise-internals | If set to true, the internal functions of the compiled code will be optimised using tree-shaking reducing the size of the output. |
| -o, --output-dir=output-dir |
The build directory where the compiled files should be placed. If the path does not
exist, it will be created. Defaults to
build.
|
| -s, --string-code=string-code | The content of a Kipper file that can be passed as a replacement for the 'file' parameter. |
Example CLI Command
kipper compile -s 'call print("Hello world!");' -e utf16le -i -b