public static int GetCharValueFromCharInGrammarLiteral(string cstr)
{
switch (cstr.Length)
{
case 1:
// 'x'
return cstr[0]; // no escape char
case 2:
if (cstr[0] != '\\')
return -1;
// '\x' (antlr lexer will catch invalid char)
if (char.IsDigit(cstr[1]))
return -1;
int escChar = cstr[1];
int charVal = ANTLRLiteralEscapedCharValue[escChar];
if (charVal == 0)
return -1;
return charVal;
case 6:
// '\u1234'
if (!cstr.StartsWith("\\u"))
return -1;
string unicodeChars = cstr.Substring(2, cstr.Length - 2);
int result;
if (!int.TryParse(unicodeChars, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out result))
return -1;
return result;
default:
return -1;
}
}