- axiol-language is a small hobby language without any dependencies compiling to assembly and other different targets. the following readme shows further descriptions and documentations to features and general elements of the language.
(โ
) This feature is fully implemented and working to current date
(๐ง) This feature is halfway implemented or still in progress
(โ) This feature is NOT implemented and is still in planing
---
title: Language Diagram
---
graph TD;
classDef red stroke:#f00
classDef green stroke:#0f0
source(["Source *.ax"])
lexer["Lexer (TokenStream)"]
source:::red --> lexer
parser["Parser (AST)"]
lexer --> parser
analysis["StaticAnalysis"]
error_stage_1["Analysis Error report"]
analysis --> error_stage_1
optimising["ASTOptimizer"]
parser --> analysis
parser --> optimising
instructionGen["Instruction Generation"]
optimising --> instructionGen
instructionModification["Instruction Modification
using the **isa** keyword"]
instructionGen --> instructionModification
optimising-- ISAStatement ---instructionModification
linker["Linking multiple
instruction sets"]
instructionModification --> linker
importingLogic["importing files"]
importedSources["imported files"]
linker --> importingLogic
importingLogic --> importedSources
importedSources --> lexer;
compiler["Compiler Instructions
to target"]
inlineASM["Generating Inline
Assembly"]
linker --> inlineASM
linker --> compiler
finishedCode(["Finished generated
Code *.asm"])
compiler --> finishedCode:::green
Architecture | Supported Sizes | Status |
---|---|---|
ARM | โ | |
THUMB THUMB_EB |
โ | |
AARCH64 AARCH64_32 AARCH64_BE |
โ | |
X86 X86_64 |
โ | |
RISCV64 RISCV32 |
โ | |
MIPS MIPS_EL MIPS64 MIPS64_EL |
โ | |
PPC32 PPC32_LE PPC64 PPC64_LE |
โ | |
SPARC64 | โ | |
AVR | โ | |
IR | โ |
name | desc | size | example (scaled on max range exp) |
---|---|---|---|
i8 | signed type | 8 | 42 |
i16 | signed type | 16 | 1000 |
i32 | signed type | 32 | 50000 |
i64 | signed type | 64 | 1000000 |
i128 | signed type | 128 | 100000000000000000000000000000000000000 |
u8 | unsigned type | 8 | 255u |
u16 | unsigned type | 16 | 50000u |
u32 | unsigned type | 32 | 400000000u |
u64 | unsigned type | 64 | 1000000000000000000u |
u128 | unsigned type | 128 | 100000000000000000000000000000000000000u |
f32 | floating type | 32 | 3.14f |
f64 | floating type | 64 | 3.141592653589793f |
u0 | equal to void | 0 | () |
string | wrapped char-array | len of array * 8 | "Hello, World" |
char | single char | 8 | 'A' |
boolean | 2 state type | 8 | true false |
void | unusable value can be used for returns | 0 | void |
null | null value can be used for returns | 0 | null |
Syntax:
<type> [ptr][clone]<name> = [ref]<expr>;
pointer:
i32 *pointer = &value;
references:
i32 reference = *pointer;
address:
() address = (void*) &reference;
clone:
i32 @test = orig;
(<ident>,...) -> {}
(<ident>,...) -> expr
examples:
lambdaTest(() -> 4);
lambdaTest((argc, args) -> 4);
lambdaTest((args) -> 4);
lambdaTest((args) -> {
});