/** * <copyright> * </copyright> * * */ package org.emftext.term.propositional.expression.resource.expression.grammar; /** * The abstract super class for all elements of a grammar. This class provides * methods to traverse the grammar rules. */ public abstract class ExpressionSyntaxElement { private ExpressionSyntaxElement[] children; private ExpressionSyntaxElement parent; private org.emftext.term.propositional.expression.resource.expression.grammar.ExpressionCardinality cardinality; public ExpressionSyntaxElement(org.emftext.term.propositional.expression.resource.expression.grammar.ExpressionCardinality cardinality, ExpressionSyntaxElement[] children) { this.cardinality = cardinality; this.children = children; if (this.children != null) { for (ExpressionSyntaxElement child : this.children) { child.setParent(this); } } } /** * Sets the parent of this syntax element. This method must be invoked at most * once. */ public void setParent(ExpressionSyntaxElement parent) { assert this.parent == null; this.parent = parent; } /** * Returns the parent of this syntax element. This parent is determined by the * containment hierarchy in the CS model. */ public ExpressionSyntaxElement getParent() { return parent; } public ExpressionSyntaxElement[] getChildren() { if (children == null) { return new ExpressionSyntaxElement[0]; } return children; } public org.eclipse.emf.ecore.EClass getMetaclass() { return parent.getMetaclass(); } public org.emftext.term.propositional.expression.resource.expression.grammar.ExpressionCardinality getCardinality() { return cardinality; } }