/*
* xtc - The eXTensible Compiler
* Copyright (C) 2004-2007 Robert Grimm
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.parser;
import xtc.tree.Node;
/**
* The superclass of all grammar elements.
*
* @author Robert Grimm
* @version $Revision: 1.13 $
*/
public abstract class Element extends Node {
/** An element's tag. */
public static enum Tag {
/** An action. */ ACTION,
/** A node marker. */ NODE_MARKER,
/** A nonterminal. */ NONTERMINAL,
/** A null literal. */ NULL,
/** An ordered choice. */ CHOICE,
/** A parse tree node. */ PARSE_TREE_NODE,
/** A sequence. */ SEQUENCE,
/** The any character constant. */ ANY_CHAR,
/** A character class. */ CHAR_CLASS,
/** A character literal. */ CHAR_LITERAL,
/** A character switch. */ CHAR_SWITCH,
/** A string literal. */ STRING_LITERAL,
/** A binding. */ BINDING,
/** A parser action. */ PARSER_ACTION,
/** A followed-by predicate. */ FOLLOWED_BY,
/** A not-followed-by predicate. */ NOT_FOLLOWED_BY,
/** A semantic predicate. */ SEMANTIC_PREDICATE,
/** An option. */ OPTION,
/** A repetition. */ REPETITION,
/** A string match. */ STRING_MATCH,
/** A voided element. */ VOIDED,
/** An action base value. */ ACTION_BASE_VALUE,
/** A binding value. */ BINDING_VALUE,
/** A generic action value. */ GENERIC_ACTION_VALUE,
/** A generic recursion value. */ GENERIC_RECURSION_VALUE,
/** A generic node vlaue. */ GENERIC_NODE_VALUE,
/** An empty list value. */ EMPTY_LIST_VALUE,
/** A proper list value. */ PROPER_LIST_VALUE,
/** A null value. */ NULL_VALUE,
/** A string value. */ STRING_VALUE,
/** A token value. */ TOKEN_VALUE
}
/** Create a new element. */
public Element() { /* Nothing to do. */ }
/**
* Get this element's tag.
*
* @return The tag.
*/
public abstract Tag tag();
}