public static ICQ_Expression Compiler_Expression_SubValue(Token value) { if (value.type == TokenType.VALUE) { if (value.text[value.text.Length - 1] == 'f') { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(float), -float.Parse(value.text.Substring(0, value.text.Length - 1))); return(new CQ_Expression_Value(v)); } else if (value.text.Contains(".")) { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(double), -double.Parse(value.text)); return(new CQ_Expression_Value(v)); } else { ulong lv = ulong.Parse(value.text); if (lv > uint.MaxValue) { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(long), -(long)lv); return(new CQ_Expression_Value(v)); } else { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(int), -(int)lv); return(new CQ_Expression_Value(v)); } } } else { DebugUtil.LogError("无法识别的简单表达式" + value); return(null); } }
public static ICQ_Expression Compiler_Expression_Value(Token value, int pos) { if (value.type == TokenType.VALUE) { if (value.text[value.text.Length - 1] == 'f') { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(float), float.Parse(value.text.Substring(0, value.text.Length - 1))); return(new CQ_Expression_Value(v)); } else if (value.text.Contains(".")) { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(double), double.Parse(value.text)); return(new CQ_Expression_Value(v)); } else { if (value.text.Contains("'")) { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(char), (char)value.text[1]); return(new CQ_Expression_Value(v)); } else { ulong lv = ulong.Parse(value.text); if (lv > uint.MaxValue) { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(long), (long)lv); return(new CQ_Expression_Value(v)); } else { CQ_Value v = new CQ_Value(); v.SetNumber(typeof(int), (int)lv); return(new CQ_Expression_Value(v)); } } } } else if (value.type == TokenType.STRING) { CQ_Value v = new CQ_Value(); v.SetObject(typeof(string), value.text.Substring(1, value.text.Length - 2)); return(new CQ_Expression_Value(v)); } else if (value.type == TokenType.IDENTIFIER) { CQ_Expression_GetValue getvalue = new CQ_Expression_GetValue(pos, pos, value.line, value.line); getvalue.value_name = value.text; return(getvalue); } else if (value.type == TokenType.TYPE) { CQ_Expression_GetValue getvalue = new CQ_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 { DebugUtil.LogError("无法识别的简单表达式" + value); return(null); } }