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