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"))
}
}