public override void Visit(ClassDeclNode node)
        {
            ClassBeingVisited             = Analysis.Environment.Classes.Lookup(node.className.name);
            ClassBeingVisited.SizeInBytes = SizeOf(ClassBeingVisited);
            int Offset = 4;

            if (ClassBeingVisited.ClassType.BaseClassType != null)
            {
                Offset += SizeOf(Analysis.Environment.Classes.Lookup(ClassBeingVisited.ClassType.BaseClassType.Name));
            }
            for (int x = 0; x < ClassBeingVisited.Fields.Count; x++)
            {
                FieldDefinition field = ClassBeingVisited.Fields.ItemAt(x);
                field.SizeInBytes = 4;
                Offset           += field.SizeInBytes;
                field.Location    = Offset;
            }

            if (node.methodDeclList != null)
            {
                for (int x = 0; x < node.methodDeclList.methodDeclList.Count; x++)
                {
                    node.methodDeclList.MethodDeclAtIndex(x).Accept(this);
                }
            }
        }
        public override void Visit(ClassDeclNode node)
        {
            ClassBeingVisited = Analysis.Environment.Classes.Lookup(node.className.name);
            if (node.extendsClass != null)
            {
                GenText(node.className.name + "$$ dd " + node.extendsClass.className.name + "$$");
            }
            else
            {
                GenText(node.className.name + "$$ dd 0");
            }

            Dictionary <string, string> VTable = GenerateVTable(ClassBeingVisited);

            Dictionary <string, string> .Enumerator enumerator = VTable.GetEnumerator();
            int MethodOffset = 4;

            while (enumerator.MoveNext())
            {
                GenText("\tdd " + enumerator.Current.Value + "$" + enumerator.Current.Key);
                if (ClassBeingVisited.Methods.Contains(enumerator.Current.Key))
                {
                    ClassBeingVisited.Methods.Lookup(enumerator.Current.Key).Location = MethodOffset;
                }
                MethodOffset += 4;
            }
        }
예제 #3
0
 private static CompileResult DetectInNode(ASTNode node, Domain currentDomain)
 {
     return(node switch
     {
         ClassDeclNode classDeclNode => DetectClassDecl(classDeclNode, currentDomain),
         NamespaceDirectiveNode namespaceDirective => DetectNamespaceDecl(namespaceDirective, currentDomain),
         _ => new CompileResult(true)
     });
예제 #4
0
 private static CompileResult SolveInNode(ASTNode node, Domain currentDomain)
 {
     return(node switch
     {
         NamespaceDirectiveNode namespaceDirective => SolveNamespaceElements(namespaceDirective, currentDomain),
         ClassDeclNode classDeclNode => SolveClassDecl(classDeclNode, currentDomain),
         _ => new CompileResult(true)
     });
예제 #5
0
 public void Visit(ClassDeclNode n)
 {
     foreach (var node in n.GetChildren())
     {
         node.SymTable = n.Table;
         node.Accept(this);
     }
 }
예제 #6
0
 public void Visit(ClassDeclNode n)
 {
     PrintDOTIDLabel(n);
     PrintDOTParentChild(n);
     foreach (var child in n.GetChildren())
     {
         child.Accept(this);
     }
 }
예제 #7
0
 private static CompileResult DefineType(ASTNode node, Domain domain)
 {
     return(node switch
     {
         NamespaceDirectiveNode namespaceDirective => DefineNamespaceElements(namespaceDirective, domain),
         ClassDeclNode classDecl => DefineClass(classDecl, domain),
         FuncDeclNode funcDecl => DefineFunc(funcDecl, domain),
         _ => new CompileResult(true)
     });
예제 #8
0
        public void Visit(ClassDeclNode n)
        {
            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }
        }
예제 #9
0
        public override void Visit(ClassDeclNode node)
        {
            ClassBeingVisited = Analysis.Environment.Classes.Lookup(node.className.name);

            if (node.extendsClass != null)
            {
                node.extendsClass.Accept(this);
            }
        }
예제 #10
0
        /// <summary>
        /// Checks if the given class node is empty. Also adds the empty class
        /// node to code block of mRootImportNode.
        /// </summary>
        /// <param name="node">Given node</param>
        /// <returns>True if the given node is empty class node</returns>
        private bool AddToRootImportNodeIfEmpty(AssociativeNode node)
        {
            ClassDeclNode classNode = node as ClassDeclNode;

            if (null == classNode || !IsEmptyClassNode(classNode))
            {
                return(false);
            }

            mRootImportNode.CodeNode.Body.Add(classNode);
            return(true);
        }
        public override void Visit(ClassDeclNode node)
        {
            ClassType classType = new ClassType(node.className.name);

            ClassBeingVisited           = Analysis.Environment.Classes.Add(node.className.name);
            ClassBeingVisited.ClassType = classType;

            if (node.extendsClass != null)
            {
                node.extendsClass.Accept(this);
            }
        }
예제 #12
0
        private void CollectTypeInfo(ClassDeclNode node)
        {
            bool exists = types.Exists(node.ClassName);

            if (!exists)
            {
                types.AddType(new ClassType(node.ClassName));
            }
            else
            {
                Log(string.Format("Объект с именем {0} уже существует", node.ClassName), node);
            }
        }
예제 #13
0
        public void Visit(ClassDeclNode n)
        {
            var children = n.GetChildren();

            n.Table.ClassName = children[0].Token.Lexeme;

            var inheritList = children[1].GetChildren().Select(x => x.Token.Lexeme);

            n.Table.Inherits.AddRange(inheritList);

            var memberDecls = children.GetCast <MemberDeclsNode>(2);

            memberDecls.Table = n.Table;
            memberDecls.Accept(this);
        }
예제 #14
0
        private void Visit(ClassDeclNode node, TypeInfo type)
        {
            var classType = types.GetType(node.ClassName) as ClassType;

            foreach (dynamic item in node.ClassDecls)
            {
                Visit(item, classType);
            }

            var constructor = new ConstructorInfo(false, classType);

            foreach (var item in classType.Fields)
            {
                constructor.AddArg(item.Name, item.Type);
            }

            classType.AddConstructor(constructor);
        }
예제 #15
0
 public virtual void Visit(ClassDeclNode node)
 {
     ClassBeingVisited = Analysis.Environment.Classes.Lookup(node.className.name);
     if (node.extendsClass != null)
     {
         node.extendsClass.Accept(this);
     }
     if (node.variableDeclList != null)
     {
         for (int x = 0; x < node.variableDeclList.variableDeclList.Count; x++)
         {
             node.variableDeclList.VariableDeclAtIndex(x).Accept(this);
         }
     }
     if (node.methodDeclList != null)
     {
         for (int x = 0; x < node.methodDeclList.methodDeclList.Count; x++)
         {
             node.methodDeclList.MethodDeclAtIndex(x).Accept(this);
         }
     }
 }
예제 #16
0
        public override void Visit(ClassDeclNode node)
        {
            ClassBeingVisited = Analysis.Environment.Classes.Lookup(node.className.name);

            if (node.variableDeclList != null)
            {
                for (int x = 0; x < node.variableDeclList.variableDeclList.Count; x++)
                {
                    FieldDefinition fieldDefinition = ClassBeingVisited.Fields.Add(node.variableDeclList.VariableDeclAtIndex(x).identifier.name);
                    fieldDefinition.FieldType = node.variableDeclList.VariableDeclAtIndex(x).type.Type;
                    if (fieldDefinition.FieldType.GetType() == typeof(ClassType))
                    {
                        Analysis.Environment.Classes.Lookup(fieldDefinition.FieldType.Name);
                    }
                }
            }
            if (node.methodDeclList != null)
            {
                for (int x = 0; x < node.methodDeclList.methodDeclList.Count; x++)
                {
                    node.methodDeclList.MethodDeclAtIndex(x).Accept(this);
                }
            }
        }
예제 #17
0
 public override void Visit(ClassDeclNode node)
 {
     Console.WriteLine(this.indentation + "Class <Identifier: " + node.className.name + ">           ---- Class Declaration ----");
     indentation = indentation + "   ";
     if (node.extendsClass != null)
     {
         node.extendsClass.Accept(this);
     }
     if (node.variableDeclList != null)
     {
         for (int x = 0; x < node.variableDeclList.variableDeclList.Count; x++)
         {
             node.variableDeclList.VariableDeclAtIndex(x).Accept(this);
         }
     }
     if (node.methodDeclList != null)
     {
         for (int x = 0; x < node.methodDeclList.methodDeclList.Count; x++)
         {
             node.methodDeclList.MethodDeclAtIndex(x).Accept(this);
         }
     }
     indentation = indentation.Substring(0, indentation.Length - 3);
 }
 public virtual bool VisitClassDeclNode(ClassDeclNode node)
 {
     return(DefaultVisit(node));
 }
예제 #19
0
    protected override void DoAction(int action)
    {
        switch (action)
        {
        case 2: // Program -> MainClassDecl, ClassDeclList_Opt
        { CurrentSemanticValue = new ProgramNode((MainClassDeclNode)ValueStack[ValueStack.Depth - 2], (ClassDeclListNode)ValueStack[ValueStack.Depth - 1], LineNumber); Analysis.AST = (ProgramNode)CurrentSemanticValue; }
        break;

        case 3: // MainClassDecl -> ClassKeyword, Identifier, CurlyBracketOpen, PublicKeyword,
                //                  StaticKeyword, VoidKeyword, MainKeyword, RoundBracketOpen,
                //                  StringKeyword, SquareBracketOpen, SquareBracketClose,
                //                  Identifier, RoundBracketClose, CurlyBracketOpen, Statement,
                //                  CurlyBracketClose, CurlyBracketClose
        { CurrentSemanticValue = new MainClassDeclNode((IdentifierNode)ValueStack[ValueStack.Depth - 16], (IdentifierNode)ValueStack[ValueStack.Depth - 6], (StatementNode)ValueStack[ValueStack.Depth - 3], LineNumber); }
        break;

        case 4: // ClassDeclList_Opt -> ClassDeclList_Opt, ClassDecl
        { ((ClassDeclListNode)ValueStack[ValueStack.Depth - 2]).AddClassDecl((ClassDeclNode)ValueStack[ValueStack.Depth - 1]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 2]; }
        break;

        case 5: // ClassDeclList_Opt -> /* empty */
        { CurrentSemanticValue = new ClassDeclListNode(LineNumber); }
        break;

        case 6: // ClassDecl -> ClassKeyword, Identifier, Extends_Opt, CurlyBracketOpen,
                //              VariableDeclList_Opt, MethodDeclList_Opt, CurlyBracketClose
        { CurrentSemanticValue = new ClassDeclNode((IdentifierNode)ValueStack[ValueStack.Depth - 6], (ExtendsNode)ValueStack[ValueStack.Depth - 5], (VariableDeclListNode)ValueStack[ValueStack.Depth - 3], (MethodDeclListNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 7: // Extends_Opt -> ExtendsKeyword, Identifier
        { CurrentSemanticValue = new ExtendsNode((IdentifierNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 9: // MethodDeclList_Opt -> MethodDeclList_Opt, MethodDecl
        { ((MethodDeclListNode)ValueStack[ValueStack.Depth - 2]).AddMethodDecl((MethodDeclNode)ValueStack[ValueStack.Depth - 1]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 2]; }
        break;

        case 10: // MethodDeclList_Opt -> /* empty */
        { CurrentSemanticValue = new MethodDeclListNode(LineNumber); }
        break;

        case 11: // MethodDecl -> PublicKeyword, Type, Identifier, RoundBracketOpen,
                 //               ParamDeclList_Opt, RoundBracketClose, CurlyBracketOpen,
                 //               VariableDeclList_Opt, StatementListEndingInReturn,
                 //               CurlyBracketClose
        { ((StatementListNode)ValueStack[ValueStack.Depth - 2]).statementList.Reverse(); CurrentSemanticValue = new MethodDeclNode((TypeNode)ValueStack[ValueStack.Depth - 9], (IdentifierNode)ValueStack[ValueStack.Depth - 8], (ParamDeclListNode)ValueStack[ValueStack.Depth - 6], (VariableDeclListNode)ValueStack[ValueStack.Depth - 3], (StatementListNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 12: // VariableDeclList_Opt -> VariableDeclList_Opt, VariableDecl
        { ((VariableDeclListNode)ValueStack[ValueStack.Depth - 2]).AddVariableDecl((VariableDeclNode)ValueStack[ValueStack.Depth - 1]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 2]; }
        break;

        case 13: // VariableDeclList_Opt -> /* empty */
        { CurrentSemanticValue = new VariableDeclListNode(LineNumber); }
        break;

        case 14: // VariableDecl -> Type, Identifier, SemiColon
        { CurrentSemanticValue = new VariableDeclNode((TypeNode)ValueStack[ValueStack.Depth - 3], (IdentifierNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 15: // StatementListEndingInReturn -> Statement, StatementListEndingInReturn
        { ((StatementListNode)ValueStack[ValueStack.Depth - 1]).AddStatement((StatementNode)ValueStack[ValueStack.Depth - 2]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 16: // StatementListEndingInReturn -> ReturnKeyword, Expr, SemiColon
        { CurrentSemanticValue = new StatementListNode(LineNumber); ((StatementListNode)CurrentSemanticValue).AddStatement(new ReturnStatementNode((ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber)); }
        break;

        case 17: // ParamDeclList_Opt -> Type, Identifier, ParamDeclListRest_Opt
        { ((ParamDeclListNode)ValueStack[ValueStack.Depth - 1]).paramDeclList.Reverse(); ((ParamDeclListNode)ValueStack[ValueStack.Depth - 1]).AddParamDecl(new ParamDeclNode((TypeNode)ValueStack[ValueStack.Depth - 3], (IdentifierNode)ValueStack[ValueStack.Depth - 2], LineNumber)); ((ParamDeclListNode)ValueStack[ValueStack.Depth - 1]).paramDeclList.Reverse(); CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 19: // ParamDeclListRest_Opt -> ParamDeclListRest_Opt, Comma, Type, Identifier
        { ((ParamDeclListNode)ValueStack[ValueStack.Depth - 4]).AddParamDecl(new ParamDeclNode((TypeNode)ValueStack[ValueStack.Depth - 2], (IdentifierNode)ValueStack[ValueStack.Depth - 1], LineNumber)); CurrentSemanticValue = ValueStack[ValueStack.Depth - 4]; }
        break;

        case 20: // ParamDeclListRest_Opt -> /* empty */
        { CurrentSemanticValue = new ParamDeclListNode(LineNumber); }
        break;

        case 21: // Type -> IntKeyword, SquareBracketOpen, SquareBracketClose
        { CurrentSemanticValue = new IntegerArrayTypeNode(LineNumber); }
        break;

        case 22: // Type -> IntKeyword
        { CurrentSemanticValue = new IntegerTypeNode(LineNumber); }
        break;

        case 23: // Type -> BooleanKeyword
        { CurrentSemanticValue = new BooleanTypeNode(LineNumber); }
        break;

        case 24: // Type -> Identifier
        { CurrentSemanticValue = new IdentifierTypeNode(((IdentifierNode)ValueStack[ValueStack.Depth - 1]).name, LineNumber); }
        break;

        case 25: // Statement -> CurlyBracketOpen, StatementList_Opt, CurlyBracketClose
        { CurrentSemanticValue = new StatementBlockNode((StatementListNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 26: // Statement -> IfKeyword, RoundBracketOpen, Expr, RoundBracketClose, Statement,
                 //              ElseKeyword, Statement
        { CurrentSemanticValue = new IfStatementNode((ExpressionNode)ValueStack[ValueStack.Depth - 5], (StatementNode)ValueStack[ValueStack.Depth - 3], (StatementNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 27: // Statement -> WhileKeyword, RoundBracketOpen, Expr, RoundBracketClose, Statement
        { CurrentSemanticValue = new WhileStatementNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (StatementNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 28: // Statement -> SystemOutPrintLnKeyword, RoundBracketOpen, Expr, RoundBracketClose,
                 //              SemiColon
        { CurrentSemanticValue = new SystemOutPrintLnStatementNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], LineNumber); }
        break;

        case 29: // Statement -> Identifier, EqualsOperator, Expr, SemiColon
        { CurrentSemanticValue = new AssignmentStatementNode((IdentifierNode)ValueStack[ValueStack.Depth - 4], (ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 30: // Statement -> Identifier, Dot, Identifier, EqualsOperator, Expr, SemiColon
        { CurrentSemanticValue = new FieldAssignmentStatementNode((IdentifierNode)ValueStack[ValueStack.Depth - 6], (IdentifierNode)ValueStack[ValueStack.Depth - 4], (ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 31: // Statement -> Identifier, SquareBracketOpen, Expr, SquareBracketClose,
                 //              EqualsOperator, Expr, SemiColon
        { CurrentSemanticValue = new ArrayAssignmentStatementNode((IdentifierNode)ValueStack[ValueStack.Depth - 7], (ExpressionNode)ValueStack[ValueStack.Depth - 5], (ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 32: // Statement -> error, SemiColon
        { CurrentSemanticValue = new StatementBlockNode(new StatementListNode(LineNumber), LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 33: // Statement -> error, CurlyBracketClose
        { CurrentSemanticValue = new StatementBlockNode(new StatementListNode(LineNumber), LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 34: // StatementList_Opt -> StatementList_Opt, Statement
        { ((StatementListNode)ValueStack[ValueStack.Depth - 2]).AddStatement((StatementNode)ValueStack[ValueStack.Depth - 1]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 2]; }
        break;

        case 35: // StatementList_Opt -> /* empty */
        { CurrentSemanticValue = new StatementListNode(LineNumber); }
        break;

        case 36: // Expr -> RoundBracketOpen, Expr, RoundBracketClose
        { CurrentSemanticValue = ValueStack[ValueStack.Depth - 2]; }
        break;

        case 37: // Expr -> NotOperator, Expr
        { CurrentSemanticValue = new NotExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 38: // Expr -> NewKeyword, IntKeyword, SquareBracketOpen, Expr, SquareBracketClose
        { CurrentSemanticValue = new NewIntegerArrayExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 39: // Expr -> NewKeyword, Identifier, RoundBracketOpen, RoundBracketClose
        { CurrentSemanticValue = new NewObjectExpressionNode((IdentifierNode)ValueStack[ValueStack.Depth - 3], LineNumber); }
        break;

        case 40: // Expr -> Expr, AndAndOperator, Expr
        { CurrentSemanticValue = new AndExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 41: // Expr -> Expr, LessThanOperator, Expr
        { CurrentSemanticValue = new LessThanExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 42: // Expr -> Expr, AddOperator, Expr
        { CurrentSemanticValue = new AddExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 43: // Expr -> Expr, SubtractOperator, Expr
        { CurrentSemanticValue = new SubtractExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 44: // Expr -> Expr, MultiplyOperator, Expr
        { CurrentSemanticValue = new MultiplyExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (ExpressionNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 45: // Expr -> Expr, SquareBracketOpen, Expr, SquareBracketClose
        { CurrentSemanticValue = new ArrayLookupExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 4], (ExpressionNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 46: // Expr -> Expr, Dot, LengthKeyword
        { CurrentSemanticValue = new LengthExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], LineNumber); }
        break;

        case 47: // Expr -> Expr, Dot, Identifier
        { CurrentSemanticValue = new FieldAccessExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 3], (IdentifierNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 48: // Expr -> Expr, Dot, Identifier, RoundBracketOpen, ExprList_Opt,
                 //         RoundBracketClose
        { CurrentSemanticValue = new MethodCallExpressionNode((ExpressionNode)ValueStack[ValueStack.Depth - 6], (IdentifierNode)ValueStack[ValueStack.Depth - 4], (ExpressionListNode)ValueStack[ValueStack.Depth - 2], LineNumber); }
        break;

        case 49: // Expr -> ThisKeyword
        { CurrentSemanticValue = new ThisExpressionNode(LineNumber); }
        break;

        case 50: // Expr -> Identifier
        { CurrentSemanticValue = new IdentifierExpressionNode((IdentifierNode)ValueStack[ValueStack.Depth - 1], LineNumber); }
        break;

        case 51: // Expr -> IntegerConstant
        { CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 52: // Expr -> TrueKeyword
        { CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 53: // Expr -> FalseKeyword
        { CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 54: // Expr -> error, IntegerConstant
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 55: // Expr -> error, TrueKeyword
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 56: // Expr -> error, FalseKeyword
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 57: // Expr -> error, Identifier
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 58: // Expr -> error, ThisKeyword
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 59: // Expr -> error, SquareBracketClose
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 60: // Expr -> error, RoundBracketClose
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 61: // Expr -> error, LengthKeyword
        { CurrentSemanticValue = new InvalidExpressionNode(LineNumber); yyclearin(); Analysis.LogSyntaxError("Syntax error", LineNumber); }
        break;

        case 62: // ExprList_Opt -> Expr, ExprListRest_Opt
        { ((ExpressionListNode)ValueStack[ValueStack.Depth - 1]).expressionList.Reverse(); ((ExpressionListNode)ValueStack[ValueStack.Depth - 1]).AddExpression((ExpressionNode)ValueStack[ValueStack.Depth - 2]); ((ExpressionListNode)ValueStack[ValueStack.Depth - 1]).expressionList.Reverse(); CurrentSemanticValue = ValueStack[ValueStack.Depth - 1]; }
        break;

        case 63: // ExprList_Opt -> /* empty */
        { new ExpressionListNode(LineNumber); }
        break;

        case 64: // ExprListRest_Opt -> ExprListRest_Opt, Comma, Expr
        { ((ExpressionListNode)ValueStack[ValueStack.Depth - 3]).AddExpression((ExpressionNode)ValueStack[ValueStack.Depth - 1]); CurrentSemanticValue = ValueStack[ValueStack.Depth - 3]; }
        break;

        case 65: // ExprListRest_Opt -> /* empty */
        { CurrentSemanticValue = new ExpressionListNode(LineNumber); }
        break;
        }
    }
예제 #20
0
 public virtual TAssociative VisitClassDeclNode(ClassDeclNode node)
 {
     return(VisitAssociativeNode(node));
 }
예제 #21
0
 public virtual void VisitClassDeclNode(ClassDeclNode node)
 {
     DefaultVisit(node);
 }
예제 #22
0
 private void Initialize(ClassDeclNode classDeclNode)
 {
 }