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); } }
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; }
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); } }
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); } }