Пример #1
0
        static void EvaluateDeclaration(ParseNode node, Dictionary<string, TypeData> variableTypes)
        {
            var states = node.Parent.States;

            var typeIndex = states.MappedNodes.IndexOf(node);
            if (typeIndex != 0)
                return;
            var variableNameIndex = states.GeNextTokenKind(TokenKind.Identifier);
            if (variableNameIndex == 0)
                return;

            var variableNode = states[variableNameIndex];
            var variableContent = variableNode.Content;

            var typeData = new TypeData();
            for (var index = typeIndex; index < variableNameIndex; index++)
            {
                var mappedNode = states[index];
                TypeData.ValidateToken(mappedNode);
                typeData.AddTypeNode(mappedNode);
            }
            variableTypes[variableContent] = typeData;
            do
            {
                var assignIndex = states.GeNextTokenKind(TokenKind.Assign, variableNameIndex);
                var commaIndex = states.GeNextTokenKind(TokenKind.Comma, variableNameIndex);
                var semiColonIndex = states.GeNextTokenKind(TokenKind.Comma, variableNameIndex);
                var separatorIndex = Math.Max(commaIndex, semiColonIndex);

                variableNameIndex = states.GeNextTokenKind(TokenKind.Identifier, variableNameIndex + 1);

                if (assignIndex < variableNameIndex)
                    continue;
                if (variableNameIndex == 0)
                    return;
                variableNode = states[variableNameIndex];
                variableContent = variableNode.Content;
                variableTypes[variableContent] = typeData;

            } while (true);
        }
Пример #2
0
        static void ExtractParameterData(ParseNode parent, Dictionary<string, TypeData> variableTypes)
        {
            var states = parent.States;
            var openParam = 1;
            if (states.Count == 2)
                return;
            if (states.Count == 3)
            {
                states.RemoveAt(1);
                return;
            }
            var pos = openParam;
            do
            {
                var typeData = new TypeData();
                var i = pos;
                for (; states[i].Token != TokenKind.Identifier; i++)
                {
                    typeData.AddTypeNode(states[i]);
                }
                variableTypes[states[i].Content] = typeData;
                pos = states.GeNextTokenKind(TokenKind.Comma, pos);
                if (pos == 0)
                    return;
                pos++;

            } while (true);
        }
Пример #3
0
 static void AddNodeType(TypeData typeData, string content)
 {
     typeData.AddTypeNode(TokenKind.TypeName.BuildTokenFromId(content));
 }