/// <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); } }
/// <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)); }
/// <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))); }