/** * 读取identifier的text,然后从函数地址表中读取该函数的中间代码起始地址 * 调用call指令 * 将expression List压入被调用函数的局部变量表中 */ public override object VisitCallStatement([NotNull] CMMParser.CallStatementContext context) { // 看一下有多少参数 VisitExpressionList(context.expressionList()); int count = 0; if (context.expressionList() != null) { count = getLen(context.expressionList()); } // IntermediateCode code1 = new IntermediateCode(count, InstructionType.push, context.Start.Line); codes.Add(code1); IntermediateCode code0 = new IntermediateCode(context.Identifier().GetText(), InstructionType.call, context.Start.Line); codes.Add(code0); return(null); }
/// <summary> /// Visit a parse tree produced by <see cref="CMMParser.callStatement"/>. /// <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 VisitCallStatement([NotNull] CMMParser.CallStatementContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="CMMParser.callStatement"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitCallStatement([NotNull] CMMParser.CallStatementContext context) { }