load_compiler = {
include 'parser/parser'
include 'parser/compiler'
include 'parser/var_assigner'
}
interactive = object.new
interactive.init = {
load_compiler
my.assigner = var_assigner.new([:program], :interactive)
my.c = compiler.new([:program])
}
interactive.prototype.run = { str |
parsed = brat_parser.parse(str, "program", true)
false? parsed
{ :"" }
{
my.assigner.ast = parsed.ast
my.c.ast = assigner.assign
my.c.interactive
}
}
brat2lua = object.new
brat2lua.compile_string = { str |
load_compiler
parsed = brat_parser.parse(str, "program", true)
false? parsed
{
false
}
{
ast = parsed.ast
ast = var_assigner.new(ast).assign
compiler.new(ast).compile
}
}
brat2lua.compile_file = { file_name |
load_compiler
include 'file'
src = file.read "#{file_name}.brat"
out = brat2lua.compile_string src
true? out
{ file.open "#{file_name}.lua", :w, { f | f.write out } }
{ throw "Syntax error in #{file_name}.brat" }
}
brat2lua.start_interactive = {
interactive.new
}
brat2lua.ast_from_string = { str |
load_compiler
parsed = brat_parser.parse(str, "program", true)
false? parsed
{
throw "Failed to parse."
}
{
ast = parsed.ast
ast = var_assigner.new(ast).assign
}
}
export brat2lua, :brat2lua