Ejemplo n.º 1
0
        public static OrderedDictionary GetLocalsDictionary(ParseTreeNode node)
        {
            var types  = GetTypes(node);
            var result = new OrderedDictionary(types.Count);

            var localsIds = new object[types.Count];

            var sigArgs1ParseTreeNode = node;
            var sigArgParseTreeNode   = sigArgs1ParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.sigArg);

            while (sigArgParseTreeNode != null)
            {
                var sigArgId = SigArgParseTreeNodeHelper.GetId(sigArgParseTreeNode);

                var paramAttrParseTreeNode = sigArgParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.paramAttr);
                var sigArgNumber           = ParamAttrParseTreeNodeHelper.GetNumberAttribute(paramAttrParseTreeNode);

                localsIds[sigArgNumber] = sigArgId;

                sigArgs1ParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArgs1);
                sigArgParseTreeNode   = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArg);
            }

            foreach (var localId in localsIds)
            {
                result.Add(localId, null);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static List <string> GetNames(ParseTreeNode node)
        {
            var result = new List <string>();

            var sigArgs1ParseTreeNode = node;
            var sigArgParseTreeNode   = sigArgs1ParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.sigArg);

            while (sigArgParseTreeNode != null)
            {
                var sigArgId = SigArgParseTreeNodeHelper.GetId(sigArgParseTreeNode);
                result.Add(sigArgId);

                sigArgs1ParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArgs1);
                sigArgParseTreeNode   = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArg);
            }

            result.Reverse();

            return(result);
        }