示例#1
0
        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;
        }
示例#2
0
        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);
        }