Beispiel #1
0
        public void addRoutine(AstNode node)
        {
            List <AstNode>    childs = node.getChilds();
            RoutineTableEntry entry  = new RoutineTableEntry(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);
        }
Beispiel #2
0
        private string handleParameters(AstNode parameter, RoutineTableEntry 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);
        }