complier was deemed redundant, as the java stuff
This commit is contained in:
parent
2b1a56b4fe
commit
f39eef38a1
@ -1,27 +0,0 @@
|
||||
require 'java'
|
||||
java_import java.lang.System
|
||||
java_import java.io.PrintStream
|
||||
|
||||
module Vm
|
||||
module Builtins
|
||||
def add_builtins
|
||||
public_static_method 'print', [], int, int do
|
||||
iload 0
|
||||
|
||||
getstatic System, :out, PrintStream
|
||||
swap
|
||||
invokevirtual PrintStream, :print, [void, int]
|
||||
|
||||
ldc 0
|
||||
ireturn
|
||||
end
|
||||
|
||||
public_static_method 'minus', [], int, int, int do
|
||||
iload 0
|
||||
iload 1
|
||||
isub
|
||||
ireturn
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,74 +0,0 @@
|
||||
require 'bitescript'
|
||||
require 'vm/parser'
|
||||
require 'vm/transform'
|
||||
require 'vm/builtins'
|
||||
|
||||
module Vm
|
||||
class Compiler
|
||||
def initialize(filename)
|
||||
@filename = filename
|
||||
@classname = File.basename(@filename, '.vm')
|
||||
end
|
||||
|
||||
def compile
|
||||
tree = parse_source
|
||||
funcs, exprs = split_functions tree
|
||||
classname = @classname
|
||||
|
||||
builder = BiteScript::FileBuilder.build(@filename) do
|
||||
public_class classname, object do |klass|
|
||||
klass.extend(Builtins)
|
||||
klass.add_builtins
|
||||
|
||||
funcs.each do |f|
|
||||
context = Hash.new
|
||||
f.eval(context, klass)
|
||||
end
|
||||
|
||||
klass.public_static_method 'main', [], void, string[] do |method|
|
||||
context = Hash.new
|
||||
exprs.each do |e|
|
||||
e.eval(context, method)
|
||||
end
|
||||
|
||||
method.returnvoid
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
write_result builder
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_source
|
||||
source = File.expand_path(@filename)
|
||||
program = IO.read source
|
||||
|
||||
parser = Parser.new
|
||||
transform = Transform.new
|
||||
syntax = parser.parse(program)
|
||||
tree = transform.apply(syntax)
|
||||
|
||||
Array(tree)
|
||||
end
|
||||
|
||||
def split_functions(tree)
|
||||
first_expr = tree.index { |t| ! t.is_a?(FunctionExpression) }
|
||||
funcs = first_expr ? tree[0...first_expr] : tree
|
||||
exprs = first_expr ? tree[first_expr..-1] : []
|
||||
|
||||
[funcs, exprs]
|
||||
end
|
||||
|
||||
def write_result(builder)
|
||||
destination = File.expand_path(@classname + '.class')
|
||||
|
||||
builder.generate do |n, b|
|
||||
File.open(destination, 'wb') do |f|
|
||||
f.write b.generate
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user