dyon 0.10.0

A rusty dynamically typed scripting language
Documentation

fn main() {
    // Generate parser.
    gen_parser := false

    // Test the generated code.
    test := true
    folder := "test_bootstrap"

    generator := unwrap(load("meta/generator2.dyon"))

    if gen_parser {
        // Use pre-converted meta conversion rules for conversion rule syntax.
        self_meta := call_ret(generator, "self_meta", [])
        // Get the code required to parse from meta data to conversion rules.
        code := unwrap(call_ret(generator, "to_code", [self_meta]))
        // Store the code as the parser, which is a required step before generating code.
        _ := unwrap(save(string: str(code), file: "meta/parser.dyon"))
    }

    if test {
        meta_data := load(meta: "meta/" + folder + "/syntax.txt",
                          file: "meta/" + folder + "/data.txt")
        data := unwrap(meta_data)
        println(json_from_meta_data(data))

        output := unwrap(load(
            source: "meta/" + folder + "/output.dyon",
            imports: [generator]
        ))
        data := unwrap(call_ret(output, "convert", [data]))

        if folder == "test_2" {
            for i len(data) {
                println(data[i].first_name + " " +
                        data[i].last_name + ":")
                println("=================")
                println(data[i].photo)
                println("")
            }
        } else {
            println(data)
        }
    } else {
        meta_data := load(meta: "meta/syntax.txt",
                          file: "meta/" + folder + "/convert.txt")
        data := unwrap(meta_data)
        println(json_from_meta_data(data))

        // Load parser and convert to meta rules.
        parser := unwrap(load(source: "meta/parser.dyon", imports: [generator]))
        meta := unwrap(call_ret(parser, "convert", [data]))
        println(meta)

        code := unwrap(call_ret(generator, "to_code", [meta]))
        println(code)

        _ := unwrap(save(string: str(code),
                         file: "meta/" + folder + "/output.dyon"))
    }
}