//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// PLEASE DO NOT EDIT WITHOUT THE EXPLICIT CONSENT OF THE AUTHOR! \\
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
using Ilog.Language.Util;
using Ilog.Language.Tools;
namespace Ilog.Language.Syntax
{
/**
* This is the class of terminal symbols used by the grammar
* at parser construction time.
*
* @see GrammarSymbol
*
* @version Last modified on Mon May 23 15:00:58 2005 by hak
* @author Hassan Aït-Kaci
* @copyright © 2000 ILOG, S.A.
*/
internal class Terminal : GrammarSymbol, Taggable
{
/**
* Construct a terminal symbol with the specified name.
*/
internal Terminal (string name)
: base(name,grammar.Terminals,grammar.TCount++)
{
}
internal Terminal (string name, bool isOperator)
: base(name,grammar.Terminals,grammar.TCount++)
{
this.isOperator = isOperator;
}
/**
* This symbol's precedence.
*/
private int precedence = Grammar.MIN_PRECEDENCE;
public int Precedence
{
get { return precedence; }
set { precedence = value; }
}
/**
* This symbol's associativity.
*/
private int associativity = Grammar.NON_ASSOCIATIVE;
public int Associativity
{
get { return associativity; }
set { associativity = value; }
}
/**
* An indicator that this is used as a rule tag
*/
private bool isTag = false;
internal new bool IsTag
{
get { return isTag; }
set { isTag = value; }
}
/**
* An HTML-coded label for this symbol (used when generating a grammar
* documentation)
*/
internal override string Label
{
get { return ""+Misc.HtmlString(name)+""; }
}
/**
* Establishes a link between this symbol and the specified rule.
*/
internal override void Link (Rule rule)
{
// Documentor.HasError = IsError;
if (ruleOccurrences == null)
ruleOccurrences = new SetOf(grammar.Rules);
ruleOccurrences.Add(rule);
}
/**
* A coded reference name for this symbol (used when generating
* a grammar documentation).
*/
internal override string RefName
{
get
{
if (refName == null)
refName = Options.GrammarPrefix
+ "_TT_"+Misc.ZeroPaddedString(Index,
Misc.NumWidth(grammar.TCount));
return refName;
}
}
/**
* Returns this terminal symbol's single-quote name.
*/
public override string ToString ()
{
return '\''+name+'\'';
}
}
}