public static IDLNumericLiteral ToNumericLiteral(this IDLParserToken Marker) { var n = new IDLNumericLiteral { Marker = Marker }; Marker.AssertDigit(); var w = new StringBuilder(); var i = n.Marker; n.Terminator = i; if (n.Marker.Text == "0") { if (n.Marker.Next.Text.StartsWith("x")) { n.Style = System.Globalization.NumberStyles.HexNumber; w.Append(n.Marker.Next.Text.Substring(1)); n.Terminator = i.Next; i = i.Next.Next; } } var FirstDotMarksDouble = false; i.UntilSelected( p => { if (p.Text.IsDigit()) { n.Terminator = p; w.Append(p.Text); } if (p.Next.Text.IsDigit()) return p.Next; if (!FirstDotMarksDouble) if (p.Next.Text == ".") { if (p.Next.Next.Text.IsDigit()) { FirstDotMarksDouble = true; w.Append(p.Text); return p.Next.Next; } } return p; } ); if (FirstDotMarksDouble) { n.DoubleValue = double.Parse(w.ToString()); } else { n.Int32Value = int.Parse(w.ToString(), n.Style); // alias n.DoubleValue = n.Int32Value; } return n; }
public static IDLNumericLiteral ToNumericLiteral(this IDLParserToken Marker) { var n = new IDLNumericLiteral { Marker = Marker }; Marker.AssertDigit(); var w = new StringBuilder(); var i = n.Marker; n.Terminator = i; if (n.Marker.Text == "0") { if (n.Marker.Next.Text.StartsWith("x")) { n.Style = System.Globalization.NumberStyles.HexNumber; w.Append(n.Marker.Next.Text.Substring(1)); n.Terminator = i.Next; i = i.Next.Next; } } var FirstDotMarksDouble = false; i.UntilSelected( p => { if (p.Text.IsDigit()) { n.Terminator = p; w.Append(p.Text); } if (p.Next.Text.IsDigit()) { return(p.Next); } if (!FirstDotMarksDouble) { if (p.Next.Text == ".") { if (p.Next.Next.Text.IsDigit()) { FirstDotMarksDouble = true; w.Append(p.Text); return(p.Next.Next); } } } return(p); } ); if (FirstDotMarksDouble) { n.DoubleValue = double.Parse(w.ToString()); } else { n.Int32Value = int.Parse(w.ToString(), n.Style); // alias n.DoubleValue = n.Int32Value; } return(n); }