kc3-lang/kc3/README.md

Download

C3

C3 is a programming language project, inspired by C, Elixir and Common Lisp. It could be described as C with Elixir macros, pattern matching, and a semantic object system. The idea is to plug macros and pattern matching into C89 and use them to implement the graph database.

The garbage collector is optional, like in C.

defmodule C3 do
  
  def compile (c3, opts) when is_string(c3) do
    c3
    |> C3.parse(opts)
    |> C3.compile()
  end

  def eval (c3, env, opts) when is_string(c3) do
    c3
    |> C3.parse(opts)
    |> C3.eval(env)
  end

  defguard is_c3 (x) do
    is_tuple(x)
  end

  def compile (c3, opts) when is_c3(c3) do
    c3
    |> C3.to_assembly(opts)
    |> Assembly.to_elf(opts)
  end

  def eval (c3, env) when is_c3(c3) do
    [...]
  end
end

Structure

libc3

C3 is implemented using libc3 a small C89 library implementing the core of the language.

The library includes a parser and an interpreter for C3 code in C structures.

Parser

The parser is recursive descent for now.

AST

The AST is represented as C3 data structures and can be meta-programmed in C.

Interpreter

Under development.

ic3

Interactive shell. Under development.

c3s

Script interpreter. Under development.

TODO


Source

Download