Exemplo n.º 1
0
        private Token ReadNext()
        {
            Char firstChar = m_buffer.Current;

            if (ProgramLine.EndOfField(firstChar))
            {
                return(Token.MakeEndOfToken());
            }
            else if (firstChar == Casl2Defs.Comma)
            {
                m_buffer.MoveNext();
                return(Token.MakeComma());
            }
            else if (firstChar == Casl2Defs.EqualSign)
            {
                m_buffer.MoveNext();
                return(Token.MakeEqualSign());
            }
            else if (DecimalConstant.IsStart(firstChar))
            {
                Int32 i32Value = DecimalConstant.Read(m_buffer);
                return(Token.MakeDecimalConstant(i32Value));
            }
            else if (HexaDecimalConstant.IsStart(firstChar))
            {
                Int32 i32Value = HexaDecimalConstant.Read(m_buffer);
                return(Token.MakeHexaDecimalConstant(i32Value));
            }
            else if (StringConstant.IsStart(firstChar))
            {
                String strValue = StringConstant.Read(m_buffer);
                return(Token.MakeStringConstant(strValue));
            }
            else if (Label.IsStart(firstChar))
            {
                // ラベルはレジスタ名の場合もある。オペランドの字句要素の区切りまで読み込む。
                String strValue = Operand.ReadItem(m_buffer);
                if (ProgramRegister.IsRegisterName(strValue))
                {
                    return(Token.MakeRegisterName(strValue));
                }
                else
                {
                    return(Token.MakeLabel(strValue));
                }
            }
            else
            {
                String message = String.Format(Resources.MSG_CouldNotParseAsToken, firstChar);
                throw new Casl2SimulatorException(message);
            }
        }
Exemplo n.º 2
0
 private static Boolean EndOfItem(Char current)
 {
     return(ProgramLine.EndOfField(current) || current == Casl2Defs.Comma);
 }