public ICLS_Expression Compiler_Expression_Value(Token value, int pos)
{
if (value.type == TokenType.VALUE)
{
if (value.text[value.text.Length - 1] == 'f')
{
CLS_Value_Value<float> number = new CLS_Value_Value<float>();
number.value_value = float.Parse(value.text.Substring(0, value.text.Length - 1));
return number;
}
else if (value.text.Contains("."))
{
CLS_Value_Value<double> number = new CLS_Value_Value<double>();
number.value_value = double.Parse(value.text);
return number;
}
else
{
if (value.text.Contains("'"))
{
CLS_Value_Value<char> number = new CLS_Value_Value<char>();
number.value_value = (char)value.text[1];
return number;
}
else
{
ulong lv = ulong.Parse(value.text);
if (lv > uint.MaxValue)
{
CLS_Value_Value<long> number = new CLS_Value_Value<long>();
number.value_value = (long)lv;
return number;
}
else
{
CLS_Value_Value<int> number = new CLS_Value_Value<int>();
number.value_value = (int)lv;
return number;
}
}
}
}
else if (value.type == TokenType.STRING)
{
CLS_Value_Value<string> str = new CLS_Value_Value<string>();
str.value_value = value.text.Substring(1, value.text.Length - 2);
return str;
}
else if (value.type == TokenType.IDENTIFIER)
{
CLS_Expression_GetValue getvalue = new CLS_Expression_GetValue(pos, pos, value.line, value.line);
getvalue.value_name = value.text;
return getvalue;
}
else if (value.type == TokenType.TYPE)
{
CLS_Expression_GetValue getvalue = new CLS_Expression_GetValue(pos, pos, value.line, value.line);
int l = value.text.LastIndexOf('.');
if (l >= 0)
{
getvalue.value_name = value.text.Substring(l + 1);
}
else
getvalue.value_name = value.text;
return getvalue;
}
else
{
logger.Log_Error("无法识别的简单表达式" + value);
return null;
}
}