public void addRoutine(AstNode node) { List <AstNode> childs = node.getChilds(); CallTableEntry entry = new CallTableEntry(node); foreach (var i in childs) { if (i.GetNodeType().Equals(AstNode.NodeType.Identifier)) { entry.name = ((Token)i.getValue()).GetValue(); } else if (i.GetNodeType().Equals(AstNode.NodeType.Parameters)) { foreach (var parameter in i.getChilds()) { entry.parameters.Add(handleParameters(parameter, entry)); } } else if (i.GetNodeType().Equals(AstNode.NodeType.Results)) { foreach (var result in i.getChilds()) { entry.results.Add(handleResult(result)); } } else if (i.GetNodeType().Equals(AstNode.NodeType.RoutineBody)) { entry.hasBody = true; entry.symbols = handleRoutineBody(i, new SymbolTable()); } } routines.Add(entry.name, entry); }
private string handleParameters(AstNode parameter, CallTableEntry entry) { string type = ((Token)parameter.getValue()).GetValue(); string name = ((Token)parameter.getChilds()[0].getValue()).GetValue(); checkSymbol(name); SymbolTableEntry symbolTableEntry = new SymbolTableEntry(parameter.getChilds()[0]); symbolTableEntry.type = type; symbols.Add(name, symbolTableEntry); return(type); }