rubyx/lib/vool/statement.rb

85 lines
2.3 KiB
Ruby
Raw Normal View History

# Virtual
# Object Oriented
2017-08-30 16:21:13 +02:00
# Language
#
# VOOL is the abstraction of ruby, ruby minus some of the fluff
# fluff is generally what makes ruby nice to use, like 3 ways to achieve the same thing
# if/unless/ternary , reverse ifs (ie statement if condition), reverse whiles,
# implicit blocks, splats and multiple assigns etc
#
# Also, Vool is a typed tree, not abstract, so there is a base class Statement
# and all it's derivation that make up the syntax tree
#
# Also Vool has expression and statements and simple syntax. So returns must be explicit
# not everthing is just assignable, ifs can only test simple expressions etc (wip)
#
# This allows us to write compilers or passes of the compiler(s) as functions on the
# classes.
2017-08-30 16:21:13 +02:00
#
module Vool
# Base class for all statements in the tree. Derived classes correspond to known language
# constructs
#
# Compilers or compiler passes are written by implementing methods.
#
class Statement
# after creation vool normalizes to ensure valid syntax and simplify
# also throw errors if violation
def normalize
return self
end
# flatten tree to array
def collect(arr)
arr << self
end
def to_mom( _ )
# temporary warning to find unimplemented kids
raise "Not implemented for #{self}"
end
def ct_type
nil
end
# create corresponding parfait objects, ie classes, types, methods
# mainly implemented by class/method statement
def create_objects
end
# used to collect type information
def add_ivar( array )
end
# used to collect frame information
def add_local( array )
end
2017-04-08 16:22:53 +02:00
# used for method creation
def set_class( clazz )
end
end
class Expression
end
end
2018-03-13 12:14:39 +01:00
require_relative "statements/assign_statement"
require_relative "statements/array_statement"
require_relative "statements/basic_values"
require_relative "statements/class_statement"
require_relative "statements/hash_statement"
require_relative "statements/if_statement"
require_relative "statements/logical_statement"
require_relative "statements/local_assignment"
require_relative "statements/method_statement"
require_relative "statements/return_statement"
require_relative "statements/statements"
require_relative "statements/send_statement"
require_relative "statements/variables"
require_relative "statements/while_statement"