Пример #1
0
        private void HandleMemberDeclFunction(MemberDeclNode n)
        {
            var children = n.GetChildren();

            var visibility    = children.GetCast <VisibilityNode>(0).Visibility;
            var name          = children[1].Token.Lexeme;
            var funcParamList = children[2].GetChildren();
            var type          = children[3].Token;

            var tableEntry = new ClassSymbolTableEntryFunction()
            {
                Visibility = visibility,
                Name       = name,
                Type       = type
            };

            for (int i = 0; i < funcParamList.Count; i += 3)
            {
                var paramType = funcParamList[i + 0].Token;
                var paramName = funcParamList[i + 1].Token.Lexeme;
                var arrayDims = NodeUtils.ExtractArrayDimListNode(funcParamList.GetCast <ArrayDimListNode>(i + 2));

                var entry = new ClassSymbolTableEntryFunctionParam()
                {
                    Type      = paramType,
                    Name      = paramName,
                    ArrayDims = arrayDims,
                };

                tableEntry.AddEntry(entry);
            }

            n.Table.AddEntry(tableEntry);
            n.SecondarySymTable = tableEntry;
        }
Пример #2
0
 public void Visit(MemberDeclNode n)
 {
     foreach (var node in n.GetChildren())
     {
         node.SymTable = n.SymTable;
         node.Accept(this);
     }
 }
Пример #3
0
        public void Visit(MemberDeclNode n)
        {
            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }
        }
Пример #4
0
 public void Visit(MemberDeclNode n)
 {
     PrintDOTIDLabel(n, n.DeclType.ToString());
     PrintDOTParentChild(n);
     foreach (var child in n.GetChildren())
     {
         child.Accept(this);
     }
 }
Пример #5
0
        public void Visit(MemberDeclNode n)
        {
            switch (n.DeclType)
            {
            case DeclType.Function:
                HandleMemberDeclFunction(n);
                break;

            case DeclType.Variable:
                HandleMemberDeclVariable(n);
                break;

            default:
                throw new InvalidOperationException("Invalid DeclType found.");
            }
        }
Пример #6
0
        private void HandleMemberDeclVariable(MemberDeclNode n)
        {
            var children = n.GetChildren();

            var visibility = children.GetCast <VisibilityNode>(0).Visibility;
            var type       = children[1].Token;
            var name       = children[2].Token.Lexeme;
            var arrayDims  = NodeUtils.ExtractArrayDimListNode(children.GetCast <ArrayDimListNode>(3));

            var tableEntry = new ClassSymbolTableEntryVariable()
            {
                Visibility = visibility,
                Type       = type,
                Name       = name,
                ArrayDims  = arrayDims
            };

            n.Table.AddEntry(tableEntry);
        }