private void GetParameters(TreeNode parametersList, string functioName) { if (parametersList is null) { return; } foreach (TreeNode parameter in parametersList.Nodes) { if (parameter.Text == @"ParamDecl") { _tmpParameters.Add(GetType(parameter.Nodes[0].Nodes[0].Text)); SymbolValue symbolValue = new SymbolValue { DataType = GetType(parameter.Nodes[0].Nodes[0].Text), Value = null, Scope = functioName }; SymbolTable.Add(new KeyValuePair <string, SymbolValue>(parameter.Nodes[1].Text, symbolValue)); _allSymbols.Add(new KeyValuePair <string, string>(parameter.Nodes[1].Text, functioName)); } GetParameters(parameter, functioName); } }
public void Annotate(TreeNode tree) { if (tree is null) { return; } foreach (TreeNode node in tree.Nodes) { if (node.Text == @"DeclarationStatement") { string varName; if (node.Nodes[1].Nodes[0].Nodes[0].Text == @"AssignmentStatement") { varName = node.Nodes[1].Nodes[0].Nodes[0].Nodes[0].Text; } else { varName = node.Nodes[1].Nodes[0].Nodes[0].Text; } if (Get_VarFromSymbolTable(varName)) { SymbolValue val = Get_SymbolValue(varName); if (val.Scope != "NN") { node.Nodes.Add("DateType").Nodes.Add(val.DataType.ToString()); if (val.Value != null) { node.Nodes.Add("Value").Nodes.Add(val.Value.ToString()); } else { node.Nodes.Add("Value").Nodes.Add("null"); } node.Nodes.Add("Scope").Nodes.Add(val.Scope); } } } Annotate(node); } }