コード例 #1
0
        public static string ConvertToMof(QualifierListAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source            = new StringBuilder();
            var lastQualifierName = default(string);

            source.Append("[");
            for (var i = 0; i < node.Qualifiers.Count; i++)
            {
                var thisQualifier     = node.Qualifiers[i];
                var thisQualifierName = node.Qualifiers[i].Name.GetNormalizedName();
                if (i > 0)
                {
                    source.Append(",");
                    var quirkEnabled = (quirks & MofQuirks.OmitSpaceBetweenInOutQualifiersForParameterDeclarations) == MofQuirks.OmitSpaceBetweenInOutQualifiersForParameterDeclarations;
                    if (!quirkEnabled || (lastQualifierName != "in") || (thisQualifierName != "out"))
                    {
                        source.Append(" ");
                    }
                }
                source.Append(MofGenerator.ConvertToMof(thisQualifier, quirks));
                lastQualifierName = thisQualifierName;
            }
            source.Append("]");
            return(source.ToString());
        }
コード例 #2
0
        /// <summary>
        /// </summary>
        /// <returns></returns>
        /// <remarks>
        /// 
        /// See http://www.dmtf.org/sites/default/files/standards/documents/DSP0221_3.0.0a.pdf
        /// A.14 Complex type value
        /// 
        ///     complexTypeValue  = complexValue / complexValueArray
        ///     complexValueArray = "{" [ complexValue *( "," complexValue) ] "}"
        ///     complexValue      = ( INSTANCE / VALUE ) OF
        ///                         ( structureName / className / associationName )
        ///                         [ alias ] propertyValueList
        ///     propertyValueList = "{" *propertySlot "}"
        ///     propertySlot      = propertyName "=" propertyValue ";"
        ///     propertyValue     = primitiveTypeValue / complexTypeValue / referenceTypeValue / enumTypeValue
        ///     alias             = AS aliasIdentifier
        ///     INSTANCE          = "instance" ; keyword: case insensitive
        ///     VALUE             = "value"    ; keyword: case insensitive
        ///     AS                = "as"       ; keyword: case insensitive
        ///     OF                = "of"       ; keyword: case insensitive 
        /// 
        ///     propertyName      = IDENTIFIER
        /// 
        /// </remarks>
        internal static ComplexTypeValueAst Parse(ParserStream stream, QualifierListAst qualifiers)
        {
            ComplexTypeValueAst ast;

            var peek = stream.Peek();

            if (peek is BlockOpenToken)
            {
                // complexValueArray
                ast = ComplexValueArrayAst.Parse(stream);
            }
            else if (peek is IdentifierToken)
            {
                // complexValue
                ast = ComplexValueAst.Parse(stream);
            }
            else
            {
                throw new InvalidOperationException();
            }

            ast.Qualifiers = qualifiers;

            return ast;
        }
コード例 #3
0
        internal static MemberAst Parse(ParserStream stream, QualifierListAst qualifiers)
        {
            var type = stream.Read<IdentifierToken>();

            bool isRef;
            if (stream.PeekKeyword("ref"))
            {
                stream.ReadKeyword("ref");
                isRef = true;
            }
            else
            {
                isRef = false;
            }

            var name = stream.Read<IdentifierToken>();

            if (stream.Peek<OpenParenthesesToken>() != null && !isRef)
            {
                var ast = new MethodAst
                {
                    Qualifiers = qualifiers,
                    Name = name.Name,
                    ReturnType = type.Name
                };

                stream.Read<OpenParenthesesToken>();
                while (!stream.Eof)
                {
                    if (stream.Peek<CloseParenthesesToken>() != null)
                        break;

                    QualifierListAst argQualifiers = null;
                    if (stream.Peek<AttributeOpenToken>() != null)
                    {
                        argQualifiers = QualifierListAst.Parse(stream);
                    }

                    var argument = new MethodAst.Argument
                    {
                        Qualifiers = argQualifiers
                    };

                    argument.Type = stream.Read<IdentifierToken>().Name;

                    if (stream.PeekKeyword("ref"))
                    {
                        stream.ReadKeyword("ref");
                        argument.IsRef = true;
                    }
                    else
                    {
                        argument.IsRef = false;
                    }

                    argument.Name = stream.Read<IdentifierToken>().Name;

                    if (stream.Peek<AttributeOpenToken>() != null)
                    {
                        stream.Read<AttributeOpenToken>();
                        stream.Read<AttributeCloseToken>();
                    }

                    if (stream.Peek<EqualsOperatorToken>() != null)
                    {
                        stream.Read<EqualsOperatorToken>();
                        argument.DefaultValue = LiteralValueAst.Parse(stream);
                    }

                    ast.Arguments.Add(argument);

                    if (stream.Peek<CommaToken>() == null)
                        break;

                    stream.Read<CommaToken>();
                }
                stream.Read<CloseParenthesesToken>();
                stream.Read<StatementEndToken>();

                return ast;
            }
            else
            {
                var ast = new FieldAst
                {
                    Qualifiers = qualifiers,
                    Name = name.Name,
                    Type = type.Name,
                    IsRef = isRef
                };

                if (stream.Peek<AttributeOpenToken>() != null)
                {
                    stream.Read<AttributeOpenToken>();
                    stream.Read<AttributeCloseToken>();
                    ast.IsArray = true;
                }

                if (stream.Peek<EqualsOperatorToken>() != null)
                {
                    stream.Read<EqualsOperatorToken>();
                    ast.Initializer = LiteralValueAst.Parse(stream);
                }

                stream.Read<StatementEndToken>();

                return ast;
            }
        }