Hash :
24e5f240
Author :
Thomas de Grivel
Date :
2023-04-10T23:19:38
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 C99 and use them to implement the graph database.
There is no garbage collector.
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
C3 is implemented using libc3 a small C99 library implementing the core of the language.
The library includes a parser and an interpreter for C3 code in C structures.
The parser is recursive descent for now.
The AST is represented as C3 data structures and can be meta-programmed in C.
Under development.
Interactive shell. Under development.
Script interpreter. Under development.
(-S8_MIN - S8_MAX) == 1
UW_MAX == ((1 << 8 * sizeof(uw)) - 1)
test_file_compare