/* * xtc - The eXTensible Compiler * Copyright (C) 2004-2006 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 java.util.ArrayList; import java.util.List; import xtc.type.Type; /** * The meta-data for a production necessary for code generation. * * @author Robert Grimm * @version $Revision: 1.25 $ */ public class MetaData { /** Flag for whether the production requires a character variable. */ public boolean requiresChar = false; /** Flag for whether the production requires an index variable. */ public boolean requiresIndex = false; /** Flag for whether the production requires a result variable. */ public boolean requiresResult = false; /** Flag for whether the production requires a predicate index variable. */ public boolean requiresPredIndex = false; /** Flag for whether the production requires a predicate result variable. */ public boolean requiresPredResult = false; /** Flag for whether the production requires a predicate matched variable. */ public boolean requiresPredMatch = false; /** Flag for whether the production requires a base index variable. */ public boolean requiresBaseIndex = false; /** The number of times this production is referenced within the grammar. */ public int usageCount = 0; /** The number of times this production references itself. */ public int selfCount = 0; /** * The structure of repetitions for this production. The length of * the list indicates the maximum depth of nested repetitions. Each * list element is a <code>Boolean</code>, which is * <code>true</code> if any of the repetitions at that level has its * {@link Repetition#once} flag set. */ public List<Boolean> repetitions; /** * The structure of bound repetitions for this production. The * length of the list indicates the maximum depth of nested * repetitions. Each list element is the (unified) type of all * lists at that level; it is <code>null</code> if none of the * repetitions has a bound semantic value. */ public List<Type> boundRepetitions; /** * The structure of options for this production. The length of the * list indicates the maximum depth of nested options. Each list * element is the (unified) type of all bound options at that level; * it is <code>null</code> if none of the options has a bound * semantic value. */ public List<Type> options; /** * Create a new meta-data record. * * <p />Note that the constructor allocates a new list for the * {@link #repetitions}, {@link #boundRepetitions} and {@link * #options} fields. */ public MetaData() { repetitions = new ArrayList<Boolean>(); boundRepetitions = new ArrayList<Type>(); options = new ArrayList<Type>(); } }