Zurück zur Startseite

SWX: Ihre eigene Sprache auf Node.js mit AST und Kryptographie

SWX — Skriptsprache auf Node.js mit eigener Syntax, Kryptographie und HTML-Generator. Beschriebene Architektur: lexer, parser mit AST, tree-walking interpreter. Code-Beispiele, Implementierungs-Komplexitäten und zukünftige Pläne bereitgestellt.

SWX v7: Spracheninterpreter mit Kryptographie auf Node.js
Advertisement 728x90

SWX-Skriptsprache auf Node.js: Architektur und Umsetzung

SWX ist eine Skriptsprache auf Basis von Node.js, die den gesamten Codeverarbeitungsprozess abdeckt: von der lexikalischen Analyse bis zur Ausführung. Der Prozess umfasst einen Lexer, Parser und Interpreter.

Quellcode → [Lexer] → Tokens → [Parser] → AST → [Interpreter] → Ergebnis

Der Lexer zerlegt den Code in Tokens und unterstützt benutzerdefinierte Operatoren wie >~ für Vergleiche und =? für Gleichheit. Der Parser erstellt den AST, und der Interpreter durchläuft den Baum, um die Knoten auszuführen.

Lexer: Code in Tokens zerlegen

Der Lexer (lexer.js) wandelt Strings in eine Token-Sequenz um. Beispiel:

Google AdInline article slot
swx x = 42

Wird zu: KEYWORD(swx) IDENT(x) ASSIGN(=) NUMBER(42).

Beim Umgang mit mehrzeichenigen Operatoren ist Priorität entscheidend: >= wird als Ganzes erkannt. Kontextuelle Modi lösen Konflikte mit Identifikatoren im HTML-Generator.

Parser und AST

Der Parser (parser.js) verwendet rekursiven Abstieg, um den AST unter Berücksichtigung der Operatorpriorität zu erstellen. Beispielbedingung:

Google AdInline article slot
swx x = 10
sw x >~ 5 {
    wx "größer als fünf"
}

AST:

{
  "type": "IfStatement",
  "condition": {
    "type": "BinaryExpression",
    "operator": ">=",
    "left": { "type": "Identifier", "name": "x" },
    "right": { "type": "NumberLiteral", "value": 5 }
  },
  "body": [
    {
      "type": "PrintStatement",
      "value": { "type": "StringLiteral", "value": "größer als fünf" }
    }
  ]
}

Die Priorität sorgt für Korrektheit: 2 + 3 4 wird als 2 + (3 4) ausgewertet.

Interpreter: AST ausführen

Der baumdurchlaufende Interpreter (interpreter.js) implementiert Handler für Knoten:

Google AdInline article slot
  • IfStatement: Bedingung auswerten und Zweig wählen.
  • ForLoop: Über Zähler iterieren.
  • FunctionDeclaration: In Symboltabelle speichern.
  • BinaryExpression: Arithmetik und Logik handhaben.

Syntax und Konstrukte

SWX hat eine einzigartige Syntax:

Variablen und Ausgabe

swx name = "SlywerX"
swx age = 20
wx "Hallo, {name}! Du bist {age} Jahre alt."

Bedingungen und Schleifen

  • sw für if, mit dr als else-if/else.
  • xs 5 { ... } — N-mal Schleife.
  • xw item in arr { ... } — foreach.
  • xl condition { ... } — while mit 1-Millionen-Iterationslimit.

Funktionen und Pattern Matching

sx add(a, b = 0) => {
    ws a + b
}

match status {
    case 200 => { wx "OK" }
    case 404 => { wx "Not Found" }
    default  => { wx "Unbekannt" }
}

Pipe-Operator |> verkettet Funktionen: "hallo" |> upper.

Kryptografie

Das #x-Modul integriert Node.js crypto:

swx hash = #x.sha256("hallo")
wx hash  // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

swx encrypted = #x.aes_enc("geheime Daten", "meinschlüssel")
swx decrypted = #x.aes_dec(encrypted, "meinschlüssel")

swx keys = #x.rsa_keys(2048)
swx signature = #x.rsa_sign("daten", keys.private)
wx #x.rsa_verify("daten", signature, keys.public)  // true

HTML-Rendering

Die sx> DSL erzeugt HTML mit CSS:

sx> "output/index.html" {
    @style {
        body   >> bg(#030810) color(#fff) font(Courier New, monospace)
        h1     >> color(#00e5ff) size(24px) bold uppercase
        .btn   >> bg(#00e5ff) color(#000) pad(10px 20px) pointer
    }
    @body {
        div.card >> {
            h1 >> "Hallo von SWX"
            button.btn >> (onclick: "alert('funktioniert!')") { "Klick mich" }
        }
    }
}

Unterstützt Verschachtelung und Attribute.

Umsetzungsherausforderungen

  • Parserpriorität: Rekursiver Abstieg mit Pratt-Parsing.
  • Lexer-Konflikte: Kontext für *~ und CSS.
  • While-Schleifen: Iterationslimit gegen Hänger.
  • Standardbibliothek: Tests auf instabilem Interpreter.

Wichtige Erkenntnisse

  • Vollständiger Stack: Lexer, Parser, Interpreter auf Node.js.
  • Eigene Syntax mit Pipes, Pattern Matching und Crypto-Modul.
  • HTML-DSL für Markup-Generierung.
  • Schutz vor Endlosschleifen und Lexer-Konflikten.
  • Version 7.0.0 mit RSA und AES.

— Editorial Team

Advertisement 728x90

Weiterlesen