/// <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); }
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); } }