## file containing data from resources/expr.json 
function(expr_definition)
map()
 key("name")
  val("oocmake")
 key("phases")
 map()
  key("name")
   val("tokenize")
  key("function")
   val("token_stream_new\(/0\ /1\)")
  key("input")
   val("global")
   val("str")
  key("output")
   val("tokens")
 end()
 map()
  key("name")
   val("parse")
  key("function")
   val("ast_parse\(/0\ /1\ /2\ /3\ /4\)")
  key("input")
   val("tokens")
   val("root_definition")
   val("global")
   val("parsers")
   val("definitions")
  key("output")
   val("ast")
 end()
 map()
  key("name")
   val("compile")
  key("function")
   val("ast_eval\(/0\ /1\ /2\ /3\)")
  key("input")
   val("ast")
   val("context")
   val("global")
   val("evaluators")
  key("output")
   val("symbol")
 end()
 key("parsers")
 map()
  key("token")
   val("ast_parse_token")
  key("any")
   val("ast_parse_any")
  key("sequence")
   val("ast_parse_sequence")
  key("list")
   val("ast_parse_list")
  key("empty")
   val("ast_parse_empty")
  key("end_of_stream")
   val("ast_parse_end_of_stream")
 end()
 key("evaluators")
 map()
  key("string")
   val("expr_compile_string")
  key("number")
   val("expr_compile_number")
  key("cmake_identifier")
   val("expr_compile_cmake_identifier")
  key("call")
   val("expr_compile_call")
  key("expression")
   val("expr_compile_expression")
  key("bind")
   val("expr_compile_bind")
  key("indexation")
   val("expr_compile_indexation")
  key("identifier")
   val("expr_compile_identifier")
  key("list")
   val("expr_compile_list")
  key("new_object")
   val("expr_compile_new_object")
  key("assignment")
   val("expr_compile_assignment")
  key("parentheses")
   val("expr_compile_parentheses")
  key("null_coalescing")
   val("expr_compile_coalescing")
  key("statements")
   val("expr_compile_statements")
  key("expression_statement")
   val("expr_compile_expression_statement")
  key("function")
   val("expr_compile_function")
  key("if")
   val("expr_compile_if")
  key("while")
   val("expr_compile_while")
  key("for")
   val("expr_compile_for")
  key("foreach")
   val("expr_compile_foreach")
  key("new")
   val("expr_compile_new")
 end()
 key("root_definition")
  val("statements")
 key("definitions")
 map()
  key("statements")
  map()
   key("node")
    val("true")
   key("parser")
    val("list")
   key("element")
    val("statement")
  end()
  key("if")
  map()
   key("node")
    val("true")
   key("parser")
    val("any")
   key("any")
    val("if_else")
    val("if_only")
  end()
  key("for_keyword")
  map()
   key("parser")
    val("token")
   key("regex")
    val("for")
  end()
  key("while_keyword")
  map()
   key("parser")
    val("token")
   key("regex")
    val("while")
  end()
  key("new")
  map()
   key("parser")
    val("sequence")
   key("node")
    val("true")
   key("sequence")
    val("new_keyword")
    val("identifier")
    val("call")
  end()
  key("for")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("for_keyword")
    val("paren_open")
    val("expression")
    val("expression")
    val("expression")
    val("paren_close")
    val("statement")
  end()
  key("while")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("while_keyword")
    val("paren_open")
    val("expression")
    val("paren_close")
    val("statement")
  end()
  key("foreach")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("while_keyword")
    val("paren_open")
    val("expression")
    val("paren_close")
    val("statement")
  end()
  key("if_only")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("if_keyword")
    val("paren_open")
    val("expression")
    val("paren_close")
    val("statement")
  end()
  key("if_else")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("if_only")
    val("else_keyword")
    val("statement")
  end()
  key("if_keyword")
  map()
   key("parser")
    val("token")
   key("regex")
    val("if")
  end()
  key("else_keyword")
  map()
   key("parser")
    val("token")
   key("regex")
    val("else")
  end()
  key("expression_statement")
  map()
   key("parser")
    val("sequence")
   key("node")
    val("true")
   key("sequence")
    val("expression")
    val("end_of_statement")
  end()
  key("statement")
  map()
   key("parser")
    val("any")
   key("any")
    val("expression_statement")
  end()
  key("end_of_statement")
  map()
   key("parser")
    val("any")
   key("any")
    val("semicolon")
    val("end_of_stream")
  end()
  key("expression")
  map()
   key("node")
    val("true")
   key("parser")
    val("list")
   key("begin")
    val("value")
   key("element")
    val("operation")
   key("end")
    val("end_of_expression")
  end()
  key("function")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("function_signature")
    val("hyphen")
    val("angular_bracket_close")
    val("function_body")
  end()
  key("hyphen")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[-]")
  end()
  key("angular_bracket_open")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[<]")
  end()
  key("angular_bracket_close")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[>]")
  end()
  key("function_signature")
  map()
   key("node")
    val("true")
   key("parser")
    val("list")
   key("element")
    val("identifier")
   key("begin")
    val("paren_open")
   key("end")
    val("paren_close")
   key("separator")
    val("comma")
  end()
  key("function_body")
  map()
   key("parser")
    val("any")
   key("any")
    val("closure")
    val("expression")
  end()
  key("closure")
  map()
   key("parser")
    val("sequence")
   key("node")
    val("true")
   key("sequence")
    val("brace_open")
    val("statements")
    val("brace_close")
  end()
  key("value")
  map()
   key("parser")
    val("any")
   key("any")
    val("assignment")
    val("function")
    val("parentheses")
    val("literal")
    val("lvalue")
    val("list")
    val("new_object")
    val("new")
  end()
  key("lvalue")
  map()
   key("parser")
    val("any")
   key("any")
    val("cmake_identifier")
    val("identifier")
    val("indexation")
  end()
  key("operation")
  map()
   key("parser")
    val("any")
   key("any")
    val("assignment")
    val("identifier")
    val("call")
    val("bind")
    val("indexation")
    val("null_coalescing")
  end()
  key("null_coalescing")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("query")
    val("query")
    val("expression")
  end()
  key("query")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[?]")
  end()
  key("parentheses")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("paren_open")
    val("expression")
    val("paren_close")
  end()
  key("assignment")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("lvalue")
    val("equals")
    val("expression")
  end()
  key("indexation")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("bracket_open")
    val("expression")
    val("bracket_close")
  end()
  key("bind")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("period")
  end()
  key("new_object")
  map()
   key("node")
    val("true")
   key("parser")
    val("sequence")
   key("sequence")
    val("key_value_list")
  end()
  key("key_value_list")
  map()
   key("parser")
    val("list")
   key("node")
    val("true")
   key("begin")
    val("brace_open")
   key("end")
    val("brace_close")
   key("element")
    val("key_value")
   key("separator")
    val("comma")
  end()
  key("call")
  map()
   key("parser")
    val("list")
   key("begin")
    val("paren_open")
   key("element")
    val("expression")
   key("separator")
    val("comma")
   key("end")
    val("paren_close")
   key("node")
    val("true")
  end()
  key("end_of_expression")
  map()
   key("parser")
    val("any")
   key("peek")
    val("true")
   key("any")
    val("comma")
    val("paren_close")
    val("semicolon")
    val("bracket_close")
    val("brace_close")
    val("end_of_stream")
  end()
  key("list")
  map()
   key("parser")
    val("list")
   key("begin")
    val("bracket_open")
   key("end")
    val("bracket_close")
   key("separator")
    val("comma")
   key("element")
    val("expression")
   key("node")
    val("true")
  end()
  key("new_keyword")
  map()
   key("parser")
    val("token")
   key("regex")
    val("new")
  end()
  key("key_value")
  map()
   key("parser")
    val("sequence")
   key("node")
    val("true")
   key("sequence")
    val("key")
    val("colon")
    val("key_value_value")
  end()
  key("key_value_value")
  map()
   key("parser")
    val("any")
   key("any")
    val("list")
    val("expression")
  end()
  key("key")
  map()
   key("parser")
    val("any")
   key("any")
    val("identifier")
    val("string")
  end()
  key("identifier")
  map()
   key("parser")
    val("token")
   key("node")
    val("true")
   key("regex")
    val("\([a-zA-Z_-][a-zA-Z0-9_\\-]*\)")
   key("except")
    val("\(new|for|while\)")
  end()
  key("cmake_identifier")
  map()
   key("parser")
    val("sequence")
   key("node")
    val("true")
   key("sequence")
    val("dollar")
    val("identifier")
  end()
  key("end_of_stream")
  map()
   key("parser")
    val("end_of_stream")
  end()
  key("nothing")
  map()
   key("parser")
    val("empty")
   key("empty")
    val("true")
  end()
  key("colon")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[:]")
  end()
  key("semicolon")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\\\\\;]")
  end()
  key("period")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\\.]")
  end()
  key("dollar")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\\\$]")
  end()
  key("equals")
  map()
   key("parser")
    val("token")
   key("regex")
    val("=")
  end()
  key("literal")
  map()
   key("parser")
    val("any")
   key("any")
    val("string")
    val("number")
  end()
  key("paren_close")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\)]")
  end()
  key("paren_open")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\(]")
  end()
  key("bracket_close")
  map()
   key("parser")
    val("token")
   key("regex")
    val("]")
  end()
  key("bracket_open")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[\\[]")
  end()
  key("brace_close")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[}]")
  end()
  key("brace_open")
  map()
   key("parser")
    val("token")
   key("regex")
    val("[{]")
  end()
  key("comma")
  map()
   key("parser")
    val("token")
   key("match")
    val(",")
  end()
  key("string")
  map()
   key("parser")
    val("token")
   key("node")
    val("true")
   key("regex")
    val("'\(\([\^']|\\\\'\)*\)'")
   key("replace")
    val("1")
  end()
  key("number")
  map()
   key("parser")
    val("token")
   key("node")
    val("true")
   key("regex")
    val("\([1-9][0-9]*\)")
  end()
  key("white_space")
  map()
   key("parser")
    val("token")
   key("ignore_token")
    val("true")
   key("regex")
    val("[\r\n\t\ ]+")
  end()
 end()
end()
ans(res)
return_ref(res)

endfunction()