示例#1
0
 public override void EnterSingle_blockVarDeclaration(NewDecafParser.Single_blockVarDeclarationContext context)
 {
     IType varType = (IType)currentScope.resolve(context.varType().GetText());
     VariableSymbol vs = new VariableSymbol(context.Id().GetText(), varType, theVariableType: VariableType.vField);
     currentScope.define(vs);
     setNodeScope(context, currentScope);
 }
示例#2
0
 public override void EnterMethodSignature(NewDecafParser.MethodSignatureContext context)
 {
     IType returnType = (IType)currentScope.resolve(context.methodType().GetText());
     MethodSymbol ms = new MethodSymbol(context.Id().GetText(), returnType, currentScope);
     currentScope.define(ms);
     currentScope = ms;
     setNodeScope(context, currentScope);
 }
示例#3
0
 public override void EnterArray_varDeclaration(NewDecafParser.Array_varDeclarationContext context)
 {
     IType varType = (IType)currentScope.resolve(context.varType().GetText());
     int arraySize = Convert.ToInt32(context.Num().GetText());
     VariableSymbol vs = new VariableSymbol(context.Id().GetText(), varType, theSize: arraySize, theVariableType: VariableType.vField);
     currentScope.define(vs);
     setNodeScope(context, currentScope);
 }
示例#4
0
        public override void EnterArray_structVarDeclaration(NewDecafParser.Array_structVarDeclarationContext context)
        {
            Template selfTemplate = stg.GetInstanceOf("Field");

            selfTemplate.Add("isArray", true);
            selfTemplate.Add("id", context.Id().GetText());
            setNodeRequiresInit(context, true);

            setNodeTemplate(context, selfTemplate);
        }
        public override void EnterArray_structVarDeclaration(NewDecafParser.Array_structVarDeclarationContext context)
        {
            FieldDeclaration FD = new FieldDeclaration();
            VarType currentTypeName = getNodeCommand(context.varType()) as VarType;
            FD.TypeName = currentTypeName;
            FD.FieldId = context.Id().GetText();
            FD.IsArray = true;

            (getNodeCommand(context.Parent) as StructDeclaration).addCommand(FD);

            setNodeCommand(context, FD);
        }
        public override void ExitArray_varDeclaration(NewDecafParser.Array_varDeclarationContext context)
        {
            FieldDeclaration FD = new FieldDeclaration();
            VarType currentTypeName = getNodeCommand(context.varType()) as VarType;

            FD.TypeName = currentTypeName;
            FD.FieldId = context.Id().GetText();
            FD.IsArray = true;

            mainClass.addCommand(FD);

            ArrayDeclaration AD = new ArrayDeclaration
            {
                Type = currentTypeName.getGenCode(),
                Name = FD.FieldId,
                ArraySize = Convert.ToInt32(context.Num().GetText())
            };

            mainClass.addCommand(AD);
        }
示例#7
0
        public override void EnterAnd_expression(NewDecafParser.And_expressionContext context)
        {
            Template selfTemplate = stg.GetInstanceOf("CondOp");
            setNodeTemplate(context, selfTemplate);

            string BTrue = getNodeTrueLabel(context);
            string BFalse = getNodeFalseLabel(context);

            string LeftTrue = LabelNameGenerator.getLabelName();
            string LeftFalse = BFalse;

            string RightTrue = BTrue;
            string RightFalse = BFalse;

            setNodeTrueLabel(context.left, LeftTrue);
            setNodeFalseLabel(context.left, LeftFalse);

            setNodeTrueLabel(context.right, RightTrue);
            setNodeFalseLabel(context.right, RightFalse);

            selfTemplate.Add("LeftLabel", LeftTrue);
        }
示例#8
0
 public override void EnterSingle_parameterDeclaration(NewDecafParser.Single_parameterDeclarationContext context)
 {
     ParameterST.Push(stg.GetInstanceOf("Parameter"));
 }
示例#9
0
 public override void EnterProgram(NewDecafParser.ProgramContext context)
 {
     MainST.Push(stg.GetInstanceOf("Main"));
 }
示例#10
0
 public override void EnterMethodDeclaration(NewDecafParser.MethodDeclarationContext context)
 {
     MethodST.Push(stg.GetInstanceOf("Method"));
 }
示例#11
0
 public override void EnterBoolean_varType(NewDecafParser.Boolean_varTypeContext context)
 {
     TypeNameST.Push(stg.GetInstanceOf("TypeName"));
 }
示例#12
0
 public override void ExitMethodDeclaration(NewDecafParser.MethodDeclarationContext context)
 {
     MainST.Peek().Add("method", MethodST.Pop().Render());
 }
示例#13
0
 public override void EnterStructDecl_varType(NewDecafParser.StructDecl_varTypeContext context)
 {
     TypeNameST.Push(stg.GetInstanceOf("TypeName"));
 }
 public override void EnterProgram(NewDecafParser.ProgramContext context)
 {
     setNodeCommand(context, mainClass);
 }
示例#15
0
 public override void ExitSingle_parameterDeclaration(NewDecafParser.Single_parameterDeclarationContext context)
 {
     ParameterST.Peek().Add("parameterId", context.Id());
     MethodST.Peek().Add("parameters", ParameterST.Pop().Render());
 }
示例#16
0
 public override void ExitProgram(NewDecafParser.ProgramContext context)
 {
     finalResult = MainST.Pop().Render();
 }
示例#17
0
 public override void ExitParameterType(NewDecafParser.ParameterTypeContext context)
 {
     ParameterST.Peek().Add("typeName", context.GetText());
 }
示例#18
0
 public override void ExitMethodType(NewDecafParser.MethodTypeContext context)
 {
     MethodST.Peek().Add("type", context.GetText());
 }
示例#19
0
 public override void ExitMethodSignature(NewDecafParser.MethodSignatureContext context)
 {
     MethodST.Peek().Add("id", context.Id().GetText());
 }
示例#20
0
 public override void EnterSingle_varDeclaration(NewDecafParser.Single_varDeclarationContext context)
 {
     FieldST.Push(stg.GetInstanceOf("Field"));
 }
示例#21
0
 public override void EnterStructDeclaration(NewDecafParser.StructDeclarationContext context)
 {
     StructDecST.Push(stg.GetInstanceOf("StructDec"));
 }
        public override void ExitSingle_varDeclaration(NewDecafParser.Single_varDeclarationContext context)
        {
            FieldDeclaration FD = new FieldDeclaration();
            VarType currentTypeName = getNodeCommand(context.varType()) as VarType;
            FD.TypeName = currentTypeName;
            FD.FieldId = context.Id().GetText();
            FD.IsArray = false;

            mainClass.addCommand(FD);

            setNodeCommand(context, FD);
        }
示例#23
0
 public override void ExitSingle_varDeclaration(NewDecafParser.Single_varDeclarationContext context)
 {
     FieldST.Peek().Add("typeName", TypeNameST.Pop().Render());
     FieldST.Peek().Add("id", context.Id().GetText());
     MainST.Peek().Add("field", FieldST.Pop().Render());
 }
示例#24
0
 public override void ExitInt_varType(NewDecafParser.Int_varTypeContext context)
 {
     TypeNameST.Peek().Add("typeName", "int32");
 }
 public override void EnterStructDeclaration(NewDecafParser.StructDeclarationContext context)
 {
     StructDeclaration SD = new StructDeclaration();
     setNodeCommand(context, SD);
 }
示例#26
0
 public override void ExitStructDeclaration(NewDecafParser.StructDeclarationContext context)
 {
     MainST.Peek().Add("field", StructDecST.Pop().Render());
 }
 public override void ExitProgram(NewDecafParser.ProgramContext context)
 {
     finalResult = mainClass.getGenCode();
 }
示例#28
0
 public override void ExitStructImpl_varType(NewDecafParser.StructImpl_varTypeContext context)
 {
     TypeNameST.Peek().Add("typeName", context.Id().GetText());
     TypeNameST.Peek().Add("isStruct", true);
 }
        public override void ExitStructDeclaration(NewDecafParser.StructDeclarationContext context)
        {
            StructDeclaration SD = getNodeCommand(context) as StructDeclaration;
            SD.NameField = context.Id().GetText();

            mainClass.addCommand(SD);
        }
示例#30
0
 public override void ExitVoid_varType(NewDecafParser.Void_varTypeContext context)
 {
     TypeNameST.Peek().Add("typeName", "void");
 }