public override object VisitStmtOpcode(AsmParser.StmtOpcodeContext context) { string opcode = context.opcode.Text.ToUpper(); Argument argument = null; if (context.argument() != null) { ArgumentVisitor argumentVisitor = new ArgumentVisitor(m_equValues, allowDefer: true); argument = argumentVisitor.Visit(context.argument()); } else { argument = new ArgumentInherent(); } switch (opcode) { case "ORG": // TODO break; case "END": Console.WriteLine("END, program start at {0}", argument); break; default: List <Opcode> candidates = Opcode.lookUpOpcode(opcode); if (candidates.Count == 0) { throw new InvalidOperationException("Unsupported opcode '" + opcode + "'"); } Console.WriteLine("{0} {1}", opcode, argument); foreach (Opcode candidate in candidates) { Console.WriteLine(" {0}", candidate); } generateInstruction(candidates, argument); break; } return(null); }
/// <summary> /// Visit a parse tree produced by <see cref="AsmParser.StmtOpcode"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitStmtOpcode([NotNull] AsmParser.StmtOpcodeContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="AsmParser.StmtOpcode"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitStmtOpcode([NotNull] AsmParser.StmtOpcodeContext context) { }