Beispiel #1
0
        /// <summary>
        /// 16 進定数を読み込みます。16 進定数は #h の形式で記述し、h は 4 桁の 16 進数
        /// (16 進数字は 0 ~ 9, A ~ F) です。
        /// </summary>
        /// <param name="buffer">読み込む文字列が入った <see cref="ReadBuffer"/> のオブジェクトです。</param>
        /// <returns>読み込んだ <see cref="Int32"/> の値を返します。</returns>
        internal static Int32 Read(ReadBuffer buffer)
        {
            Int32 parseStartIndex = buffer.CurrentIndex;

            buffer.SkipExpected(Casl2Defs.Sharp);

            Int32 digitCount = 0;
            Int32 value      = GetValue(buffer, out digitCount);

            if (digitCount != DigitCount)
            {
                String hexStr  = buffer.GetToCurrent(parseStartIndex);
                String message = String.Format(
                    Resources.MSG_InvalidHexConstantDigitCount, hexStr, DigitCount, digitCount);
                throw new Casl2SimulatorException(message);
            }

            return(value);
        }
Beispiel #2
0
        private static IEnumerable <Char> ReadChars(ReadBuffer buffer)
        {
            Int32 parseStartIndex = buffer.CurrentIndex;

            buffer.SkipExpected(Casl2Defs.SingleQuote);

            for ( ; ;)
            {
                if (buffer.Current == ReadBuffer.EndOfStr)
                {
                    String str     = buffer.GetToCurrent(parseStartIndex);
                    String message = String.Format(Resources.MSG_NoCloseQuoteInStrConstant, str);
                    throw new Casl2SimulatorException(message);
                }

                Char?c = ReadChar(buffer);
                if (c == null)
                {
                    break;
                }

                yield return(c.Value);
            }
        }