• KindaABigDyl@programming.dev
    link
    fedilink
    arrow-up
    7
    ·
    edit-2
    3 hours ago

    It’s basically just JSON that can generate itself !

    You have inspired me.

    I will make JSON with meta-programming

    I will call it DyJSON, i.e. “Dynamic JSON” but pronounced “Die, Jason!”

    It is JSON with meta-programming and the ability to call C functions from libraries

    Example:

    # This is a line comment
    
    # Put your function definitions up here
    (concat str_a str_b: "concat" "my-lib.so") # Import a function through a C ABI
    (make-person first_name last_name email -> { # Define our own generative func
        "name": (concat (concat $first_name " ") $last_name),
        "email": $email
    })
    
    # And then the JSON part which uses them
    [
        (make-person "Jenny" "Craig" "jenn.craig.420@hotmail.com"),
        (make-person "Parson" "Brown" null)
    ]
    

    As you can see, it is also a LISP to some degree

    Is there a need for this? A purpose? No. But some things simply should exist

    Thank you for helping bring this language into existence

    • KindaABigDyl@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      2 hours ago

      Here is the grammar:

      <json> ::=              <value> | <fn-def> <json>
      <value> ::=             <object> | <array> | <string> | <number> | <bool>
                              | <fn-def> | <fn-app>
                              | "null"
      <object> ::=            "{" [ <member> { "," <member> } ] "}"
      <member> ::=            <string> ":" <value>
      <string> ::=            "\"" { <char> } "\""
      <char> ::=              (ASCII other than "\"", "\\", 0-31, 127-159)
                              | (Unicode other than ASCII)
                              | ( "\\" (
                                  "\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t"
                                  | "u" <hex> <hex> <hex> <hex>
                              )
      <hex> ::=               /A-Fa-f0-9/
      <array> ::=             "[" [ <value> { "," <value> } ] "]"
      <number> ::=            <integer> [ <fraction> ] [ <exponent> ]
      <integer> ::=           "0" | /[1-9]+/ | "-" <integer>
      <fractional> ::=        "." /[0-9]+/
      <exponent> ::=          ("E" | "e") [ "-" | "+" ] /[0-9]+/
      <bool> ::=              "true" | "false"
      <fn-def> ::=            "(" <ident> { <ident> }
                                  ("->" <value> | ":" <string> <string>) ")"
      <ident> ::=             <startc> { <identc> }
      <startc> ::=            /A-Za-z_/ or non-ASCII Unicode
      <identc> ::=            <startc> | /[0-9-]/
      <fn-app> ::=            "(" <ident> { <value> } ")"
      <var> ::=               "$" <ident>