switch to sat and load code from file

This commit is contained in:
Torsten Ruger
2015-10-02 20:25:54 +03:00
parent ab55f64cdf
commit d23a9846e3
5 changed files with 78 additions and 9 deletions

58
lib/code.rb Normal file
View File

@ -0,0 +1,58 @@
include AST::Sexp
CODE = s(:expressions,
s(:class, :Integer,
s(:derives, :Object),
s(:expressions,
s(:function, :ref,
s(:name, :add_string),
s(:parameters,
s(:parameter, :ref, :str)),
s(:expressions,
s(:field_def, :int, :div),
s(:assign,
s(:name, :div),
s(:operator, "/",
s(:name, :self),
s(:int, 10))),
s(:field_def, :int, :rest),
s(:assign,
s(:name, :rest),
s(:operator, "-",
s(:name, :self),
s(:name, :div))),
s(:if,
s(:condition,
s(:operator, "<",
s(:name, :rest),
s(:int, 0))),
s(:if_true,
s(:assign,
s(:name, :str),
s(:operator, "+",
s(:name, :str),
s(:call,
s(:name, :digit),
s(:arguments,
s(:name, :rest)))))),
s(:if_false,
s(:assign,
s(:name, :str),
s(:call,
s(:name, :add_string),
s(:arguments,
s(:name, :str)),
s(:receiver,
s(:name, :div)))))),
s(:return,
s(:name, :str)))),
s(:function, :ref,
s(:name, :to_string),
s(:parameters),
s(:expressions,
s(:field_def, :ref, :start,
s(:string, " ")),
s(:return,
s(:call,
s(:name, :add_string),
s(:arguments,
s(:name, :start)))))))))

View File

@ -6,6 +6,8 @@ require "opal-parser"
require 'browser'
require 'native'
require "salama"
require "salama-reader"
require "ast"
require "interpreter/interpreter"
require "base/list_view"
require_relative "classes_view"
@ -14,6 +16,7 @@ require_relative "file_view"
require_relative "blocks_view"
require_relative "instruction_view"
require_relative "registers_view"
require_relative "code"
class MainView < ListView
@ -27,8 +30,7 @@ class MainView < ListView
# so the code above is functionally equivalent to the one below, minus the parse
# When the ast expression is given all works, so pretty sure it is the parse that fails
code = Ast::OperatorExpression.new("+", Ast::IntegerExpression.new(2),Ast::IntegerExpression.new(5))
Virtual::Compiler.compile( code , machine.space.get_main )
Bosl::Compiler.compile( CODE , machine.space.get_main )
machine.run_before "Register::CallImplementation"
@interpreter = Interpreter::Interpreter.new