public virtual TreeNode OnCastInt(TreeNode [] args) { DoubleLiteral result = (DoubleLiteral)OnCastDouble(args); return(new IntLiteral((int)result.Value)); }
public virtual TreeNode OnCastBool(TreeNode [] args) { DoubleLiteral result = (DoubleLiteral)OnCastDouble(args); return(new BooleanLiteral((int)result.Value != 0)); }
void TokenPush(bool as_string) { if (current_token.Length == 0 && !as_string) { return; } string token = current_token.ToString(); if (Debug) { Console.Write("{3}[{0}] TOKEN({4},{5}): [{2}{1}{2}]", scope, token, as_string ? "\"" : string.Empty, string.Empty.PadLeft(scope - 1, ' '), line, column - current_token.Length); } TreeNode node; if (as_string) { node = new StringLiteral(token); } else if (token == "#t") { node = new BooleanLiteral(true); } else if (token == "#f") { node = new BooleanLiteral(false); } else if (token.Length > 0 && token != "." && token != "-" && token != "+" && number_regex.IsMatch(token)) { try { if (token.StartsWith("0x") || token.StartsWith("-0x")) { int offset = token[0] == '-' ? 3 : 2; int value = int.Parse(token.Substring(offset), NumberStyles.HexNumber, culture_info.NumberFormat); node = new IntLiteral(value * (offset == 3 ? -1 : 1)); } else if (token.Contains(".")) { node = new DoubleLiteral(double.Parse(token, NumberStyles.Float, culture_info.NumberFormat)); } else { node = new IntLiteral(int.Parse(token, NumberStyles.Integer, culture_info.NumberFormat)); } } catch { throw new FormatException("Invalid number format: " + token); } } else { node = new FunctionNode(token); } if (Debug) { Console.WriteLine(" => [{0}]", node); } node.Line = line; node.Column = column; current_parent.AddChild(node); current_token.Remove(0, current_token.Length); }