Exemplo n.º 1
0
 public void Visit(MainFuncNode n)
 {
     PrintDOTIDLabel(n);
     PrintDOTParentChild(n);
     foreach (var child in n.GetChildren())
     {
         child.Accept(this);
     }
 }
        public void Visit(MainFuncNode n)
        {
            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }
        }
Exemplo n.º 3
0
        public void Visit(MainFuncNode n)
        {
            foreach (var node in n.GetChildren())
            {
                node.SymTable = _globalTable.FunctionSymbolTable.Entries.Cast <FunctionSymbolTableEntry>().Where(x => string.Equals(x.Name, "main")).FirstOrDefault();
                if (node.SymTable == null)
                {
                    _errorStream.WriteLine("No FunctionSymbolTableEntry for \"main()\" found!!!");
                    Console.WriteLine("Error: No FunctionSymbolTableEntry for \"main()\" found!!!");
                }

                node.Accept(this);
            }
        }
Exemplo n.º 4
0
        public void Visit(MainFuncNode n)
        {
            n.Table = GlobalSymbolTable.FunctionSymbolTable;

            var tableEntry = new FunctionSymbolTableEntry();

            tableEntry.Name = "main";

            foreach (var child in n.GetChildren())
            {
                child.SymTable = tableEntry;
                child.Accept(this);
            }

            var localScope = n.GetChildren().First().GetChildren().SelectMany(x => x.GetChildren()).ToList();

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

                if (!CheckTypeExists(paramType.Lexeme))
                {
                    _errorStream.WriteLine($"Use of undeclared class, \"{paramType.Lexeme}\"({paramType.StartLine}:{paramType.StartColumn})");
                    Console.WriteLine($"Error: Use of undeclared class, \"{paramType.Lexeme}\"({paramType.StartLine}:{paramType.StartColumn})");
                }

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

                tableEntry.AddLocalScopeEntry(entry);
            }

            n.Table.AddEntry(tableEntry);
            n.SymTable = tableEntry;
        }
Exemplo n.º 5
0
        public void Visit(MainFuncNode n)
        {
            var table     = (FunctionSymbolTableEntry)n.SymTable;
            var frameSize = table.MemoryLayout.TotalSize;

            _writer.WriteComment("----------------------------------------\n% Start of the program\n% ----------------------------------------");
            _writer.WriteInstruction(Instructions.Align);
            _writer.WriteInstruction(Instructions.Entry);
            _writer.WriteComment("Set stack pointer to initial value (baseaddr)");
            _writer.WriteInstruction(Instructions.Addi, Registers.R14, Registers.R14, Tags.BaseAddr);

            _writer.WriteComment("Set FSP for main function");
            _writer.WriteInstruction(Instructions.Addi, FSPReg, FSPReg, frameSize.ToString());
            _writer.WriteTag("main");

            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }
        }