public virtual void DefineToken( string text, int tokenType )
{
//[email protected]("defineToken("+text+", "+tokenType+")");
if (composite.TokenIDToTypeMap.ContainsKey( text ))
{
// already defined? Must be predefined one like EOF;
// do nothing
return;
}
// the index in the typeToTokenList table is actually shifted to
// hold faux labels as you cannot have negative indices.
if ( text[0] == '\'' )
{
composite.StringLiteralToTypeMap[text] = tokenType;
// track in reverse index too
if ( tokenType >= composite.TypeToStringLiteralList.Count )
{
composite.TypeToStringLiteralList.Resize( tokenType + 1 );
}
composite.TypeToStringLiteralList[tokenType] = text;
}
else
{
// must be a label like ID
composite.TokenIDToTypeMap[text] = tokenType;
}
int index = Label.NUM_FAUX_LABELS + tokenType - 1;
//[email protected]("defining "+name+" token "+text+" at type="+tokenType+", index="+index);
composite.MaxTokenType = Math.Max( composite.MaxTokenType, tokenType );
if ( index >= composite.TypeToTokenList.Count )
{
composite.TypeToTokenList.Resize( index + 1 );
}
string prevToken = (string)composite.TypeToTokenList[index];
if ( prevToken == null || prevToken[0] == '\'' )
{
// only record if nothing there before or if thing before was a literal
composite.TypeToTokenList[index] = text;
}
}