Ejemplo 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);
            }
        }
Ejemplo n.º 2
0
 private RegisterOperand(UInt16 opcode, ProgramRegister register)
     : base(opcode)
 {
     m_register = register;
 }
Ejemplo n.º 3
0
 internal static RegisterOperand MakeForUnitTest(UInt16 opcode, ProgramRegister register)
 {
     return(new RegisterOperand(opcode, register));
 }
Ejemplo n.º 4
0
 private RegisterOperand(UInt16 opcode, String name)
     : this(opcode, ProgramRegister.GetFor(name))
 {
     //
 }
Ejemplo n.º 5
0
 internal static RegisterOperand MakeForUnitTest(ProgramRegister register)
 {
     return(MakeForUnitTest(OpcodeDef.Dummy, register));
 }