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

            lexer.SkipComma();
            AdrXOperand adrX = AdrXOperand.Parse(lexer);

            return(new RAdrXOperand(opcode, r, adrX));
        }
        /// <summary>
        /// r,adr[,x] のオペランドの adr[,x] の部分を解釈します。戻り値は、解釈が成功したかどうかを示します。
        /// </summary>
        /// <param name="lexer">オペランドの字句を解析する <see cref="OperandLexer"/> のオブジェクトです。</param>
        /// <param name="opcode">このオペラントの命令の第 1 語のオペコードの値です。</param>
        /// <param name="r">
        /// r,adr[,x] のオペランドの最初の r の内容を保持する <see cref="RegisterOperand"/> のオブジェクトです。
        /// </param>
        /// <param name="rAdrX">
        /// 解釈が成功したとき、結果として生成した <see cref="RAdrXOperand"/> のオブジェクトを格納します。
        /// 失敗した場合は <see langword="null"/> を格納します。
        /// </param>
        /// <returns>
        /// 解釈に成功した場合は <see langword="true"/> を、失敗した場合は <see langword="false"/> を返します。
        /// </returns>
        internal static Boolean TryParseAdrX(
            OperandLexer lexer, UInt16 opcode, RegisterOperand r, out RAdrXOperand rAdrX)
        {
            AdrXOperand adrX;

            if (!AdrXOperand.TryParse(lexer, out adrX))
            {
                rAdrX = null;
                return(false);
            }
            else
            {
                rAdrX = new RAdrXOperand(opcode, r, adrX);
                return(true);
            }
        }
Beispiel #3
0
        /// <summary>
        /// adr[,x] のオペランドを解釈します。戻り値は、解釈が成功したかどうかを示します。
        /// </summary>
        /// <param name="lexer">オペランドの字句を解析する <see cref="OperandLexer"/> のオブジェクトです。</param>
        /// <param name="adrX">
        /// 解釈が成功したとき、結果として生成した <see cref="AdrXOperand"/> のオブジェクトを格納します。
        /// 失敗した場合は <see langword="null"/> を格納します。
        /// </param>
        /// <returns>
        /// 解釈に成功した場合は <see langword="true"/> を、失敗した場合は <see langword="false"/> を返します。
        /// </returns>
        internal static Boolean TryParse(OperandLexer lexer, out AdrXOperand adrX)
        {
            IAdrCodeGenerator adr;

            if (!TryParseAdr(lexer, out adr))
            {
                adrX = null;
                return(false);
            }
            else
            {
                RegisterOperand x = ParseX(lexer);
                adrX = new AdrXOperand(OpcodeDef.Dummy, adr, x);
                return(true);
            }
        }
 private RAdrXOperand(UInt16 opcode, RegisterOperand r, AdrXOperand adrX)
     : base(opcode)
 {
     m_r    = r;
     m_adrX = adrX;
 }
 internal static RAdrXOperand MakeForUnitTest(UInt16 opcode, RegisterOperand r, AdrXOperand adrX)
 {
     return(new RAdrXOperand(opcode, r, adrX));
 }
 internal static RAdrXOperand MakeForUnitTest(RegisterOperand r, AdrXOperand adrX)
 {
     return(MakeForUnitTest(OpcodeDef.Dummy, r, adrX));
 }
Beispiel #7
0
 /// <summary>
 /// オペランドが adr,x の機械語命令を作成します。
 /// </summary>
 /// <param name="mnemonic">命令のニーモニックを表わす文字列です。</param>
 /// <param name="opcode">この命令のオペコードの値です。</param>
 /// <returns></returns>
 internal static MachineInstruction MakeAdrX(String mnemonic, UInt16 opcode)
 {
     return(new MachineInstruction(
                mnemonic, Resources.SYN_AdrX, (lexer) => AdrXOperand.Parse(lexer, opcode)));
 }