switch to sat and load code from file
This commit is contained in:
58
lib/code.rb
Normal file
58
lib/code.rb
Normal 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)))))))))
|
@ -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
|
||||
|
Reference in New Issue
Block a user