# AST


class ASTObject:
	def __init__(self, **kwargs):
		for key in kwargs:
			setattr(self, key, kwargs[key])

	def __str__(self):
		output = []
		for key, value in self.__dict__.items():
			output.append(" %s: %s" % (key, value))

		output = [",".join(output)]
		output.insert(0, self.reflective_name())

		return " > ".join(output)

	def reflective_name(self):
		return self.__class__.__name__.upper()

	__repr__ = __str__


class FunctionDefinition(ASTObject):
	pass


class ImportStatement(ASTObject):
	pass


class Declaration(ASTObject):
	pass


class Assign(ASTObject):
	pass


class Literal(ASTObject):
	pass


class Primitive(ASTObject):
	pass


class Array(ASTObject):
	pass


class Dictionary(ASTObject):
	pass


class Set(ASTObject):
	pass


class If(ASTObject):
	pass


class While(ASTObject):
	pass


class For(ASTObject):
	pass


class Continue(ASTObject):
	pass


class Break(ASTObject):
	pass


class Return(ASTObject):
	pass


class Add(ASTObject):
	pass


class Sub(ASTObject):
	pass


class Mul(ASTObject):
	pass


class Div(ASTObject):
	pass


class Mod(ASTObject):
	pass


class LT(ASTObject):
	pass


class GT(ASTObject):
	pass


class UnaryAdd(ASTObject):
	pass


class UnarySub(ASTObject):
	pass


class UnaryNot(ASTObject):
	pass


class OR(ASTObject):
	pass


class AND(ASTObject):
	pass


class EQ(ASTObject):
	pass


class NE(ASTObject):
	pass


class LE(ASTObject):
	pass


class GE(ASTObject):
	pass


class Cast(ASTObject):
	pass


class CallContainer(ASTObject):
	pass


class CallFunction(ASTObject):
	pass


class TrueValue(ASTObject):
	pass


class FalseValue(ASTObject):
	pass


class NoneValue(ASTObject):
	pass


class Number(ASTObject):
	pass


class String(ASTObject):
	pass


class Decimal(ASTObject):
	pass

