/* * Copyright 2012 PRODYNA AG * * Licensed under the Eclipse Public License (EPL), Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php or * http://www.nabucco.org/License.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.nabucco.framework.generator.parser.syntaxtree; /** * Represents an grammar optional node, e.g. ( A )? or [ A ] */ public class NodeOptional implements Node { public NodeOptional() { node = null; } public NodeOptional(Node n) { addNode(n); } public void addNode(Node n) { if ( node != null) // Oh oh! throw new Error("Attempt to set optional node twice"); node = n; n.setParent(this); } public void accept(org.nabucco.framework.generator.parser.visitor.Visitor v) { v.visit(this); } public <R,A> R accept(org.nabucco.framework.generator.parser.visitor.GJVisitor<R,A> v, A argu) { return v.visit(this,argu); } public <R> R accept(org.nabucco.framework.generator.parser.visitor.GJNoArguVisitor<R> v) { return v.visit(this); } public <A> void accept(org.nabucco.framework.generator.parser.visitor.GJVoidVisitor<A> v, A argu) { v.visit(this,argu); } public boolean present() { return node != null; } public void setParent(Node n) { parent = n; } public Node getParent() { return parent; } private Node parent; public Node node; }