public override object VisitVariableDeclaration_Variable([NotNull] CMinusParser.VariableDeclaration_VariableContext context) { string variableName = context.ID().GetText(); string variableType = SymbolTable.Symbol.RemoveExtras(context.typeSpecifier().GetText()); if (variableType == "void") { this.EmitSemanticErrorMessage("Variable declared as void type", context); } SymbolTable.Symbol symbol = new SymbolTable.Symbol( id: variableName, type: variableType, construct: SymbolTable.Symbol.Construct.VARIABLE, scope: 0, size: 1, pointerCount: SymbolTable.Symbol.CountStringAsterisks(context.typeSpecifier().GetText()) ); bool success = this.symbolTable.AddSymbol(symbol); if (!success) { this.EmitSemanticErrorMessage($"Symbol {variableName} already in symbol table as a {this.symbolTable.GetSymbol(variableName).construct}", context); } return(null); }
public override object VisitVariableDeclaration_Variable([NotNull] CMinusParser.VariableDeclaration_VariableContext context) { this.symbolTable.AddVariable(context.ID().GetText(), 1); if (this.inGlobalScope) { this.writer.WriteContextRegisterRead(); this.writer.WriteImmediate(1); this.writer.WriteBinaryArithmeticExpression("+"); this.writer.WriteContextRegisterWrite(); } return(null); }
public override object VisitVariableDeclaration_Variable([NotNull] CMinusParser.VariableDeclaration_VariableContext context) { this.writer.WriteVariableDeclaration(context.ID().GetText()); return(null); }