public static int GetCharValueFromGrammarCharLiteral( string literal )
{
switch ( literal.Length )
{
case 3:
// 'x'
return literal[1]; // no escape char
case 4:
// '\x' (antlr lexer will catch invalid char)
if ( char.IsDigit( literal[2] ) )
{
ErrorManager.Error( ErrorManager.MSG_SYNTAX_ERROR,
"invalid char literal: " + literal );
return -1;
}
int escChar = literal[2];
int charVal = AntlrLiteralEscapedCharValue[escChar];
if ( charVal == 0 )
{
// Unnecessary escapes like '\{' should just yield {
return escChar;
}
return charVal;
case 8:
// '\u1234'
string unicodeChars = literal.Substring( 3, literal.Length - 1 - 3 );
//return Integer.parseInt( unicodeChars, 16 );
return int.Parse( unicodeChars, System.Globalization.NumberStyles.AllowHexSpecifier );
default:
ErrorManager.Error( ErrorManager.MSG_SYNTAX_ERROR,
"invalid char literal: " + literal );
return -1;
}
}