Esempio n. 1
0
        /// <summary>
        /// adr[,x] のオペランドを解釈します。
        /// </summary>
        /// <param name="lexer">オペランドの字句を解析する <see cref="OperandLexer"/> のオブジェクトです。</param>
        /// <param name="opcode">このオペラントの命令の第 1 語のオペコードの値です。</param>
        /// <returns>
        /// 解釈した結果として生成した <see cref="AdrXOperand"/> オブジェクトを返します。
        /// </returns>
        internal static AdrXOperand Parse(OperandLexer lexer, UInt16 opcode)
        {
            IAdrCodeGenerator adr = ParseAdr(lexer);
            RegisterOperand   x   = ParseX(lexer);

            return(new AdrXOperand(opcode, adr, x));
        }
Esempio n. 2
0
        private static Boolean TryParseAdr(OperandLexer lexer, out IAdrCodeGenerator adr)
        {
            Token token = lexer.CurrentToken;

            if (token.Type == TokenType.DecimalConstant)
            {
                lexer.MoveNext();
                adr = new DecimalConstant(token.I32Value);
                return(true);
            }
            else if (token.Type == TokenType.HexaDecimalConstant)
            {
                lexer.MoveNext();
                adr = new HexaDecimalConstant(token.I32Value);
                return(true);
            }
            else if (token.Type == TokenType.Label)
            {
                lexer.MoveNext();
                adr = new AddressConstant(token.StrValue);
                return(true);
            }
            else if (token.Type == TokenType.EqualSign)
            {
                // リテラルは、一つの 10 進定数、16 進定数又は文字定数の前に等号 (=) を付けて記述する。
                lexer.MoveNext();
                adr = Literal.Parse(lexer);
                return(true);
            }
            else
            {
                adr = null;
                return(false);
            }
        }
Esempio n. 3
0
        internal static void CheckIAdrCodeGenerator(
            IAdrCodeGenerator expected, IAdrCodeGenerator actual, String message)
        {
            TestUtils.CheckType(expected, actual, message);

            Type expectedType = expected.GetType();

            if (expectedType == typeof(DecimalConstant))
            {
                DecimalConstantTest.Check(
                    (DecimalConstant)expected, (DecimalConstant)actual, message);
            }
            else if (expectedType == typeof(HexaDecimalConstant))
            {
                HexaDecimalConstantTest.Check(
                    (HexaDecimalConstant)expected, (HexaDecimalConstant)actual, message);
            }
            else if (expectedType == typeof(AddressConstant))
            {
                AddressConstantTest.Check(
                    (AddressConstant)expected, (AddressConstant)actual, message);
            }
            else if (expectedType == typeof(Literal))
            {
                LiteralTest.Check(
                    (Literal)expected, (Literal)actual, message);
            }
            else
            {
                Assert.Fail("未知の IAddrCodeGenerator の実装クラスです。");
            }
        }
Esempio n. 4
0
        internal static void CheckGenerateLiteralDc(IAdrCodeGenerator target, String expected, String message)
        {
            LabelTable lblTable = new LabelTable();
            String     actual   = target.GenerateLiteralDc(lblTable);

            Assert.AreEqual(expected, actual, message);
        }
Esempio n. 5
0
 internal static AdrXOperand MakeForUnitTest(UInt16 opcode, IAdrCodeGenerator adr, RegisterOperand x)
 {
     return(new AdrXOperand(opcode, adr, x));
 }
Esempio n. 6
0
 internal static AdrXOperand MakeForUnitTest(IAdrCodeGenerator adr, RegisterOperand x)
 {
     return(MakeForUnitTest(OpcodeDef.Dummy, adr, x));
 }
Esempio n. 7
0
 private AdrXOperand(UInt16 opcode, IAdrCodeGenerator adr, RegisterOperand x)
     : base(opcode)
 {
     m_adr = adr;
     m_x   = x;
 }
Esempio n. 8
0
 private void CheckGenerateLiteralDc(IAdrCodeGenerator literal, String expected, String message)
 {
     ICodeGeneratorTest.CheckGenerateLiteralDc(literal, expected, message);
 }
Esempio n. 9
0
 private static void CheckAdr(IAdrCodeGenerator expected, IAdrCodeGenerator actual, String message)
 {
     ICodeGeneratorTest.CheckIAdrCodeGenerator(expected, actual, message);
 }