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; }
public void Visit(MemberDeclNode n) { foreach (var node in n.GetChildren()) { node.SymTable = n.SymTable; node.Accept(this); } }
public void Visit(MemberDeclNode n) { var children = n.GetChildren(); foreach (var child in children) { child.Accept(this); } }
public void Visit(MemberDeclNode n) { PrintDOTIDLabel(n, n.DeclType.ToString()); PrintDOTParentChild(n); foreach (var child in n.GetChildren()) { child.Accept(this); } }
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."); } }
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); }