//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// PLEASE DO NOT EDIT WITHOUT THE EXPLICIT CONSENT OF THE AUTHOR! \\
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
using Ilog.Language.Util;
namespace Ilog.Language.Parsing
{
/**
* This class is the type of tokens that are dynamic operators used by
* the parser at parse time.
*
* @see OperatorSymbol
*
* @version Last modified on Sun May 29 10:07:50 2005 by hak
* @author Hassan Aït-Kaci
* @copyright © 2000 ILOG, S.A.
*/
public class Operator : Syntax.OperatorSymbol
{
/**
* Constructs a parser operator for the specified dynamic parser,
* with the specified name, nonterminal category, precedence, and
* specifier.
*/
public Operator (DynamicParser parser, string name,
NonTerminal category, int precedence,
string specifier) // throws NonFatalParseErrorException
: base(name,parser.operators,precedence,specifier)
{
this.category = category;
string subcat = category.Name.ToUpper();
switch (fixity)
{
case PREFIX:
subCategory = GenericParser.Terminal(subcat+"_");
break;
case INFIX:
subCategory = GenericParser.Terminal("_"+subcat+"_");
break;
case POSTFIX:
subCategory = GenericParser.Terminal("_"+subcat);
break;
}
}
/**
* Constructs a parser operator for the specified dynamic parser,
* with the specified name, nonterminal category, precedence,
* associativity, and fixiy.
*/
public Operator (DynamicParser parser, string name,
NonTerminal category, int precedence,
int associativity, int fixity)
: base(name,parser.operators,precedence,associativity,fixity)
{
this.category = category;
string subcat = category.Name.ToUpper();
switch (fixity)
{
case PREFIX:
subCategory = GenericParser.Terminal(subcat+"_");
break;
case INFIX:
subCategory = GenericParser.Terminal("_"+subcat+"_");
break;
case POSTFIX:
subCategory = GenericParser.Terminal("_"+subcat);
break;
}
}
// /**
// * The dynamic parser using operator symbol.
// */
// private DynamicParser parser;
// internal DynamicParser Parser
// {
// get { return parser; }
// }
/**
* This operator's nonterminal category.
*/
private NonTerminal category;
internal NonTerminal Category
{
get { return category; }
}
/**
* This operator's nonterminal category.
*/
private Terminal subCategory;
internal Terminal SubCategory
{
get { return subCategory; }
}
/**
* This operator symbol's nonterminal category name.
*/
public override string CategoryName
{
get { return category.Name; }
}
}
}