コード例 #1
0
        public override object VisitParameter_Array([NotNull] CMinusParser.Parameter_ArrayContext context)
        {
            string parameterName = context.ID().GetText();

            this.symbolTable.AddVariable(parameterName, 1);

            int parameterIndex = this.symbolTable.GetVariableIndex(parameterName);

            this.writer.WriteVariableAddress(parameterName, parameterIndex);

            this.writer.WriteContextRegisterRead();
            this.writer.WriteBinaryArithmeticExpression("+");
            this.writer.WriteMemoryWrite();

            return(null);
        }
コード例 #2
0
        public override object VisitParameter_Array([NotNull] CMinusParser.Parameter_ArrayContext context)
        {
            string symbolType = SymbolTable.Symbol.RemoveExtras(context.typeSpecifier().GetText());

            if (symbolType == "void")
            {
                this.EmitSemanticErrorMessage("Variable declared as void type", context);
            }

            return(new SymbolTable.Symbol(
                       id: context.ID().GetText(),
                       type: symbolType,
                       construct: SymbolTable.Symbol.Construct.ARRAY,
                       scope: 1,
                       size: 1,
                       pointerCount: SymbolTable.Symbol.CountStringAsterisks(context.typeSpecifier().GetText())
                       ));
        }