import 'KiamaCS.ecore'
import 'KiamaAS.ecore'


package kiamacs

context TopCS
def : ast() : kiamaas::Top =
	kiamaas::Top {
		node = node.ast()
	}
	
context NodeCS
def : ast() : kiamaas::Node =
	invalid -- to be overriden
	
context PlusCS
def : ast() : kiamaas::Plus =
	kiamaas::Plus {	
		left = left.ast(),
		right = right.ast(),
		depth = let container = ast().oclContainer() in 
				--if container.oclIsKindOf(kiamaas::Node)  then container.oclAsType(kiamaas::Node).depth + 1 else 0 endif,
				if container.oclIsKindOf(kiamaas::Top)  then 0 else container.oclAsType(kiamaas::Plus).depth + 1 endif,
		height = ast().left.height->including(ast().right.height)->max() + 1
		--height = left.ast().height->including(right.ast().height)->max() + 1
	}

context NumCS
def : ast() : kiamaas::Num = 
	kiamaas::Num {
		value = value,
		depth = let container = ast().oclContainer() in 
				--if container.oclIsKindOf(kiamaas::Node)  then container.oclAsType(kiamaas::Node).depth + 1 else 0 endif,
				if container.oclIsKindOf(kiamaas::Top)  then 0 else container.oclAsType(kiamaas::Plus).depth + 1 endif,
		height = 0
	}
	
endpackage


-- Needed to initialize maps for AS metamodel
package kiamacs
	
endpackage