2022-01-31 22:14:05 +01:00
2022-01-02 18:44:05 +01:00
2022-01-02 18:44:05 +01:00
2022-01-29 19:20:51 +01:00

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
    • Parentheses (X+Y)*Z
    • Logical boolean 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
    • Print
    • 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
No description provided
Readme 635 KiB
Languages
Rust 100%