NEK-Lang
High level Components
- Lexer: Transforms text into Tokens
- Parser: Transforms Tokens into Abstract Syntax Tree
- Interpreter (tree-walk-interpreter): Walks the tree and evaluates the expressions / statements
- Abstract Syntax Tree Optimizer
Language features
- Math expressions
- Unary operators
- Negate
-X
- Negate
- Parentheses
(X+Y)*Z - Logical boolean operators
- Unary operators
- Variables
- Declaration
- Assignment
- While loop
while X { ... } - If else statement
if X { ... } else { ... }- If Statement
- Else statement
- Line comments
// - Strings
- For loops
for X; Y; Z { ... } - IO Intrinsics
- ReadLine
Grammar
Expressions
LITERAL = I64 | Str
expr_primary = LITERAL | IDENT | "(" expr ")" | "-" expr_primary
expr_mul = expr_primary (("*" | "/" | "%") expr_primary)*
expr_add = expr_mul (("+" | "-") expr_mul)*
expr_shift = expr_add ((">>" | "<<") expr_add)*
expr_rel = expr_shift ((">" | ">=" | "<" | "<=") expr_shift)*
expr_equ = expr_rel (("==" | "!=") expr_rel)*
expr_band = expr_equ ("&" expr_equ)*
expr_bxor = expr_band ("^" expr_band)*
expr_bor = expr_bxor ("|" expr_bxor)*
expr = expr_bor
Statements
stmt_expr = expr
stmt_let = "let" IDENT "=" expr
stmt_while = "while" expr "{" (stmt)* "}"
stmt_for = "for" stmt_let ";" expr ";" expr "{" (stmt)* "}"
stmt_if = "if" expr "{" (stmt)* "}" ( "else" "{" (stmt)* "}" )
stmt_dbgprint = "$$" expr
stmt_print = "$" expr
stmt = stmt_expr | stmt_let | stmt_while | stmt_for | stmt_if | stmt_dbgprint | stmt_print
Description
Languages
Rust
100%