public override object VisitVariable_ArrayAccess([NotNull] CMinusParser.Variable_ArrayAccessContext context) { this.Visit(context.variable()); this.writer.WriteMemoryAccess(); this.Visit(context.logicalOrExpression()); this.writer.WriteBinaryArithmeticExpression("+"); return(null); }
public override object VisitVariable_ArrayAccess([NotNull] CMinusParser.Variable_ArrayAccessContext context) { string arrayType = (string)this.Visit(context.variable()); string arrayName = SymbolTable.Symbol.RemoveExtras(context.variable().GetText()); if (!this.symbolTable.HasSymbol(arrayName)) { this.EmitSemanticErrorMessage($"Variable {arrayName} called but not declared", context); return(SymbolTable.Symbol.Construct.ERROR); } SymbolTable.Symbol foundSymbol = this.symbolTable.GetSymbol(arrayName); if (foundSymbol.construct != SymbolTable.Symbol.Construct.ARRAY) { this.EmitSemanticErrorMessage($"{arrayName} used as an array but declared as a {foundSymbol.construct}", context); return(SymbolTable.Symbol.Construct.ERROR); } return(foundSymbol.type); }