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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public override object VisitVariableDeclaration_Variable([NotNull] CMinusParser.VariableDeclaration_VariableContext context)
 {
     this.writer.WriteVariableDeclaration(context.ID().GetText());
     return(null);
 }