/**
* <copyright>
* </copyright>
*
*
*/
package org.reuseware.air.language.abstractsyntax.resource.as.util;
/**
* This class provides basic infrastructure to interpret models. To implement
* concrete interpreters, subclass this abstract interpreter and override the
* interprete_* methods. The interpretation can be customized by binding the two
* type parameters (ResultType, ContextType). The former is returned by all
* interprete_* methods, while the latter is passed from method to method while
* traversing the model. The concrete traversal strategy can also be exchanged.
* One can use a static traversal strategy by pushing all objects to interpret on
* the interpretation stack (using addObjectToInterprete()) before calling
* interprete(). Alternatively, the traversal strategy can be dynamic by pushing
* objects on the interpretation stack during interpretation.
*/
public class AbstractAsInterpreter<ResultType, ContextType> {
private java.util.Stack<org.eclipse.emf.ecore.EObject> interpretationStack = new java.util.Stack<org.eclipse.emf.ecore.EObject>();
public ResultType interprete(ContextType context) {
ResultType result = null;
while (!interpretationStack.empty()) {
org.eclipse.emf.ecore.EObject next = interpretationStack.pop();
result = interprete(next, context);
if (!continueInterpretation(result)) {
break;
}
}
return result;
}
/**
* Override this method to stop the overall interpretation depending on the result
* of the interpretation of a single model elements.
*/
public boolean continueInterpretation(ResultType result) {
return true;
}
public ResultType interprete(org.eclipse.emf.ecore.EObject object, ContextType context) {
ResultType result = null;
if (object instanceof org.reuseware.air.language.abstractsyntax.ExternalReference) {
result = interprete_org_reuseware_air_language_abstractsyntax_ExternalReference((org.reuseware.air.language.abstractsyntax.ExternalReference) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.InternalReference) {
result = interprete_org_reuseware_air_language_abstractsyntax_InternalReference((org.reuseware.air.language.abstractsyntax.InternalReference) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.Containment) {
result = interprete_org_reuseware_air_language_abstractsyntax_Containment((org.reuseware.air.language.abstractsyntax.Containment) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.Attribute) {
result = interprete_org_reuseware_air_language_abstractsyntax_Attribute((org.reuseware.air.language.abstractsyntax.Attribute) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.NodeFeature) {
result = interprete_org_reuseware_air_language_abstractsyntax_NodeFeature((org.reuseware.air.language.abstractsyntax.NodeFeature) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.QUESTIONMARK) {
result = interprete_org_reuseware_air_language_abstractsyntax_QUESTIONMARK((org.reuseware.air.language.abstractsyntax.QUESTIONMARK) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.STAR) {
result = interprete_org_reuseware_air_language_abstractsyntax_STAR((org.reuseware.air.language.abstractsyntax.STAR) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.PLUS) {
result = interprete_org_reuseware_air_language_abstractsyntax_PLUS((org.reuseware.air.language.abstractsyntax.PLUS) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.Cardinality) {
result = interprete_org_reuseware_air_language_abstractsyntax_Cardinality((org.reuseware.air.language.abstractsyntax.Cardinality) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.InterfaceNodeDefinition) {
result = interprete_org_reuseware_air_language_abstractsyntax_InterfaceNodeDefinition((org.reuseware.air.language.abstractsyntax.InterfaceNodeDefinition) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.ConcreteNodeDefinition) {
result = interprete_org_reuseware_air_language_abstractsyntax_ConcreteNodeDefinition((org.reuseware.air.language.abstractsyntax.ConcreteNodeDefinition) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.Definition) {
result = interprete_org_reuseware_air_language_abstractsyntax_Definition((org.reuseware.air.language.abstractsyntax.Definition) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.ASStatement) {
result = interprete_org_reuseware_air_language_abstractsyntax_ASStatement((org.reuseware.air.language.abstractsyntax.ASStatement) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.ASProgram) {
result = interprete_org_reuseware_air_language_abstractsyntax_ASProgram((org.reuseware.air.language.abstractsyntax.ASProgram) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.ASUnit) {
result = interprete_org_reuseware_air_language_abstractsyntax_ASUnit((org.reuseware.air.language.abstractsyntax.ASUnit) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.Import) {
result = interprete_org_reuseware_air_language_abstractsyntax_Import((org.reuseware.air.language.abstractsyntax.Import) object, context);
}
if (result != null) {
return result;
}
if (object instanceof org.reuseware.air.language.abstractsyntax.AbstractSyntax) {
result = interprete_org_reuseware_air_language_abstractsyntax_AbstractSyntax((org.reuseware.air.language.abstractsyntax.AbstractSyntax) object, context);
}
if (result != null) {
return result;
}
return result;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_AbstractSyntax(org.reuseware.air.language.abstractsyntax.AbstractSyntax object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_Import(org.reuseware.air.language.abstractsyntax.Import object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_ASUnit(org.reuseware.air.language.abstractsyntax.ASUnit object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_ASProgram(org.reuseware.air.language.abstractsyntax.ASProgram object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_ASStatement(org.reuseware.air.language.abstractsyntax.ASStatement object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_Definition(org.reuseware.air.language.abstractsyntax.Definition object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_ConcreteNodeDefinition(org.reuseware.air.language.abstractsyntax.ConcreteNodeDefinition object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_InterfaceNodeDefinition(org.reuseware.air.language.abstractsyntax.InterfaceNodeDefinition object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_Cardinality(org.reuseware.air.language.abstractsyntax.Cardinality object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_PLUS(org.reuseware.air.language.abstractsyntax.PLUS object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_STAR(org.reuseware.air.language.abstractsyntax.STAR object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_QUESTIONMARK(org.reuseware.air.language.abstractsyntax.QUESTIONMARK object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_NodeFeature(org.reuseware.air.language.abstractsyntax.NodeFeature object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_Attribute(org.reuseware.air.language.abstractsyntax.Attribute object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_Containment(org.reuseware.air.language.abstractsyntax.Containment object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_InternalReference(org.reuseware.air.language.abstractsyntax.InternalReference object, ContextType context) {
return null;
}
public ResultType interprete_org_reuseware_air_language_abstractsyntax_ExternalReference(org.reuseware.air.language.abstractsyntax.ExternalReference object, ContextType context) {
return null;
}
public void addObjectToInterprete(org.eclipse.emf.ecore.EObject object) {
interpretationStack.push(object);
}
}