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

            if (!string.IsNullOrEmpty(node.Name.Name))
            {
                source.Append(node.Name.Name);
            }
            if (node.Initializer != null)
            {
                if (node.Initializer is LiteralValueAst)
                {
                    source.AppendFormat("({0})", MofGenerator.ConvertToMof(node.Initializer, quirks));
                }
                else if (node.Initializer is LiteralValueArrayAst)
                {
                    source.Append(MofGenerator.ConvertToMof(node.Initializer, quirks));
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
            if (node.Flavors.Count > 0)
            {
                source.AppendFormat(": {0}", string.Join(" ", node.Flavors.ToArray()));
            }
            return(source.ToString());
        }
コード例 #2
0
        public static string ConvertToMof(PropertyDeclarationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if ((node.Qualifiers != null) && node.Qualifiers.Qualifiers.Count > 0)
            {
                source.AppendFormat("{0} ", MofGenerator.ConvertToMof(node.Qualifiers, quirks));
            }
            source.AppendFormat("{0} ", node.Type.Name);
            if (node.IsRef)
            {
                source.AppendFormat("{0} ", Keywords.REF);
            }
            source.Append(node.Name.Name);
            if (node.IsArray)
            {
                source.Append("[]");
            }
            if (node.Initializer != null)
            {
                source.AppendFormat(" = {0}", MofGenerator.ConvertToMof(node.Initializer, quirks));
            }
            source.Append(";");
            return(source.ToString());
        }
コード例 #3
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());
        }
コード例 #4
0
        public static string ConvertClassDeclarationAst(ClassDeclarationAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            var source = new StringBuilder();

            if (node.QualifierList.QualifierValues.Any())
            {
                source.AppendLine(AstMofGenerator.ConvertQualifierListAst(node.QualifierList, quirks));
                source.Append(indent);
            }
            source.Append($"{Constants.CLASS} {node.ClassName.Name}");
            if (node.SuperClass != null)
            {
                source.Append($" : {node.SuperClass.Name}");
            }
            source.AppendLine();
            source.Append(indent);
            source.AppendLine("{");
            foreach (var classFeature in node.ClassFeatures)
            {
                source.Append(indent);
                source.Append("\t");
                source.Append(AstMofGenerator.ConvertClassFeatureAst(classFeature, quirks, indent + '\t'));
                source.AppendLine();
            }
            source.Append(indent);
            source.Append("};");
            return(source.ToString());
        }
コード例 #5
0
        public static string ConvertToMof(MethodDeclarationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if ((node.Qualifiers != null) && node.Qualifiers.Qualifiers.Count > 0)
            {
                source.AppendFormat("{0}", MofGenerator.ConvertToMof(node.Qualifiers, quirks));
            }
            var quirkEnabled = (quirks & MofQuirks.PrefixSpaceBeforeQualifierlessMethodDeclarations) == MofQuirks.PrefixSpaceBeforeQualifierlessMethodDeclarations;

            if (quirkEnabled || ((node.Qualifiers != null) && node.Qualifiers.Qualifiers.Count > 0))
            {
                source.AppendFormat(" ");
            }
            source.AppendFormat("{0} {1}", node.ReturnType.Name, node.Name.Name);
            if (node.Parameters.Count == 0)
            {
                source.Append("();");
            }
            else
            {
                var values = node.Parameters.Select(p => MofGenerator.ConvertToMof(p, quirks)).ToArray();
                source.AppendFormat("({0});", string.Join(", ", values));
            }
            return(source.ToString());
        }
コード例 #6
0
        public static string ConvertQualifierValueAst(QualifierValueAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            source.Append(node.QualifierName.Extent.Text);
            if (node.Initializer != null)
            {
                source.Append(AstMofGenerator.ConvertIQualifierInitializerAst(node.Initializer));
            }
            ///
            /// 7.4 Qualifiers
            ///
            /// NOTE A MOF v2 qualifier declaration has to be converted to MOF v3 qualifierTypeDeclaration because the
            /// MOF v2 qualifier flavor has been replaced by the MOF v3 qualifierPolicy.
            ///
            /// These aren't part of the MOF 3.0.1 spec, but we'll include them anyway for backward compatibility.
            ///
            if (node.Flavors.Any())
            {
                source.Append(": ");
                source.Append(
                    string.Join(
                        " ",
                        node.Flavors.Select(f => f.Name)
                        )
                    );
            }
            return(source.ToString());
        }
コード例 #7
0
 public static string ConvertComplexValueAst(ComplexValueAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
 {
     if (node.IsAlias)
     {
         return($"${node.Alias.Name}");
     }
     else
     {
         var source = new StringBuilder();
         // value of GOLF_PhoneNumber
         source.Append(node.Value.Extent.Text);
         source.Append(" ");
         source.Append(node.Of.Extent.Text);
         source.Append(" ");
         source.Append(node.TypeName.Name);
         source.AppendLine();
         // {
         //     AreaCode = { "9", "0", "7" };
         //     Number = { "7", "4", "7", "4", "8", "8", "4" };
         // }
         source.Append(indent);
         source.Append(AstMofGenerator.ConvertPropertyValueListAst(node.PropertyValues, quirks, indent));
         return(source.ToString());
     }
 }
コード例 #8
0
        public static string ConvertMofProductionAst(MofProductionAst node, MofQuirks quirks = MofQuirks.None)
        {
            switch (node)
            {
            case CompilerDirectiveAst ast:
                return(AstMofGenerator.ConvertCompilerDirectiveAst(ast, quirks));

            case StructureDeclarationAst ast:
                return(AstMofGenerator.ConvertStructureDeclarationAst(ast, quirks));

            case ClassDeclarationAst ast:
                return(AstMofGenerator.ConvertClassDeclarationAst(ast, quirks));

            case AssociationDeclarationAst ast:
                return(AstMofGenerator.ConvertAssociationDeclarationAst(ast, quirks));

            case EnumerationDeclarationAst ast:
                return(AstMofGenerator.ConvertEnumerationDeclarationAst(ast, quirks));

            case InstanceValueDeclarationAst ast:
                return(AstMofGenerator.ConvertInstanceValueDeclarationAst(ast, quirks));

            case StructureValueDeclarationAst ast:
                return(AstMofGenerator.ConvertStructureValueDeclarationAst(ast, quirks));

            case QualifierTypeDeclarationAst ast:
                return(AstMofGenerator.ConvertQualifierTypeDeclarationAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #9
0
 public static string ConvertStringValueAst(StringValueAst node, MofQuirks quirks = MofQuirks.None)
 {
     return(string.Join(
                " ",
                node.StringLiteralValues
                .Select(n => $"\"{AstMofGenerator.EscapeString(n.Value)}\"")
                ));
 }
コード例 #10
0
        public static string ConvertEnumValueAst(EnumValueAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if (node.EnumName != null)
            {
                source.Append(node.EnumName.Name);
                source.Append(".");
            }
            source.Append(node.EnumLiteral.Name);
            return(source.ToString());
        }
コード例 #11
0
        public static string ConvertCompilerDirectiveAst(CompilerDirectiveAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            source.Append(node.PragmaKeyword.Extent.Text);
            source.Append(" ");
            source.Append(node.PragmaName);
            source.Append(" ");
            source.Append("(");
            source.Append(AstMofGenerator.ConvertStringValueAst(node.PragmaParameter));
            source.Append(")");
            return(source.ToString());
        }
コード例 #12
0
        public static string ConvertToMof(IEnumerable <Token> tokens, MofQuirks quirks = MofQuirks.None)
        {
            if (tokens == null)
            {
                return(null);
            }
            var source = new StringBuilder();

            foreach (var token in tokens)
            {
                source.Append(token.Extent.Text);
            }
            return(source.ToString());
        }
コード例 #13
0
        public static string ConvertComplexTypeValueAst(ComplexTypeValueAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            switch (node)
            {
            case ComplexValueArrayAst ast:
                return(AstMofGenerator.ConvertComplexValueArrayAst(ast, quirks, indent));

            case ComplexValueAst ast:
                return(AstMofGenerator.ConvertComplexValueAst(ast, quirks, indent));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #14
0
        public static string ConvertClassFeatureAst(IClassFeatureAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            switch (node)
            {
            case IStructureFeatureAst ast:
                return(AstMofGenerator.ConvertStructureFeatureAst(ast, quirks, indent));

            case MethodDeclarationAst ast:
                return(AstMofGenerator.ConvertMethodDeclarationAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #15
0
        public static string ConvertIEnumElementValueAst(IEnumElementValueAst node, MofQuirks quirks = MofQuirks.None)
        {
            switch (node)
            {
            case IntegerValueAst ast:
                return(AstMofGenerator.ConvertIntegerValueAst(ast, quirks));

            case StringValueAst ast:
                return(AstMofGenerator.ConvertStringValueAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #16
0
        public static string ConvertToMof(MofSpecificationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            for (var i = 0; i < node.Productions.Count; i++)
            {
                if (i > 0)
                {
                    source.AppendLine();
                }
                source.Append(MofGenerator.ConvertToMof(node.Productions[i], quirks));
            }
            return(source.ToString());
        }
コード例 #17
0
        public static string ConvertEnumValueArrayAst(EnumValueArrayAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            source.Append("{");
            source.Append(
                string.Join(
                    ", ",
                    node.Values.Select(v => AstMofGenerator.ConvertEnumValueAst(v, quirks))
                    )
                );
            source.Append("}");
            return(source.ToString());
        }
コード例 #18
0
        public static string ConvertEnumTypeValueAst(EnumTypeValueAst node, MofQuirks quirks = MofQuirks.None)
        {
            switch (node)
            {
            case EnumValueAst ast:
                return(AstMofGenerator.ConvertEnumValueAst(ast, quirks));

            case EnumValueArrayAst ast:
                return(AstMofGenerator.ConvertEnumValueArrayAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #19
0
        public static string ConvertComplexValueArrayAst(ComplexValueArrayAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            var source = new StringBuilder();

            source.Append("{");
            source.Append(
                string.Join(
                    ", ",
                    node.Values
                    .Select(n => AstMofGenerator.ConvertComplexValueAst(n, quirks, indent))
                    )
                );
            source.Append("}");
            return(source.ToString());
        }
コード例 #20
0
        public static string ConvertStructureFeatureAst(IStructureFeatureAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            switch (node)
            {
            case StructureDeclarationAst ast:
                return(AstMofGenerator.ConvertStructureDeclarationAst(ast, quirks, indent));

            case EnumerationDeclarationAst ast:
                return(AstMofGenerator.ConvertEnumerationDeclarationAst(ast, quirks, indent));

            case PropertyDeclarationAst ast:
                return(AstMofGenerator.ConvertPropertyDeclarationAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #21
0
        public static string ConvertEnumElementAst(EnumElementAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if (node.QualifierList.QualifierValues.Any())
            {
                source.Append(AstMofGenerator.ConvertQualifierListAst(node.QualifierList, quirks));
                source.Append(" ");
            }
            source.Append(node.EnumElementName.Name);
            if (node.EnumElementValue != null)
            {
                source.Append(" = ");
                source.Append(AstMofGenerator.ConvertIEnumElementValueAst(node.EnumElementValue, quirks));
            }
            return(source.ToString());
        }
コード例 #22
0
        public static string ConvertPropertyValueAst(PropertyValueAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            switch (node)
            {
            case PrimitiveTypeValueAst ast:
                return(AstMofGenerator.ConvertPrimitiveTypeValueAst(ast, quirks, indent));

            case ComplexTypeValueAst ast:
                return(AstMofGenerator.ConvertComplexTypeValueAst(ast, quirks, indent));

            //case ReferenceTypeValueAst ast:
            case EnumTypeValueAst ast:
                return(AstMofGenerator.ConvertEnumTypeValueAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #23
0
        public static string ConvertMethodDeclarationAst(MethodDeclarationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var prefixQuirkEnabled = (quirks & MofQuirks.PrefixSpaceBeforeQualifierlessMethodDeclarations) == MofQuirks.PrefixSpaceBeforeQualifierlessMethodDeclarations;

            var source = new StringBuilder();

            if (node.QualifierList.QualifierValues.Any())
            {
                source.Append(AstMofGenerator.ConvertQualifierListAst(node.QualifierList, quirks));
            }

            if (prefixQuirkEnabled || node.QualifierList.QualifierValues.Any())
            {
                source.Append(" ");
            }

            source.Append(node.ReturnType.Name);
            if (node.ReturnTypeIsArray)
            {
                source.Append("[]");
            }

            source.Append(" ");
            source.Append(node.Name.Name);

            if (node.Parameters.Count == 0)
            {
                source.Append("();");
            }
            else
            {
                var values = node.Parameters.Select(p => AstMofGenerator.ConvertParameterDeclarationAst(p, quirks)).ToArray();
                source.Append("(");
                source.Append(string.Join(", ", values));
                source.Append(");");
            }

            return(source.ToString());
        }
コード例 #24
0
        public static string ConvertLiteralValueAst(LiteralValueAst node, MofQuirks quirks = MofQuirks.None)
        {
            switch (node)
            {
            case IntegerValueAst ast:
                return(AstMofGenerator.ConvertIntegerValueAst(ast, quirks));

            case RealValueAst ast:
                return(AstMofGenerator.ConvertRealValueAst(ast, quirks));

            case BooleanValueAst ast:
                return(AstMofGenerator.ConvertBooleanValueAst(ast, quirks));

            case NullValueAst ast:
                return(AstMofGenerator.ConvertNullValueAst(ast, quirks));

            case StringValueAst ast:
                return(AstMofGenerator.ConvertStringValueAst(ast, quirks));

            default:
                throw new NotImplementedException();
            }
        }
コード例 #25
0
        public static string ConvertPropertyValueListAst(PropertyValueListAst node, MofQuirks quirks = MofQuirks.None, string indent = "")
        {
            // {
            var source = new StringBuilder();

            source.Append("{");
            source.AppendLine();
            //     Reference = TRUE;
            foreach (var propertyValue in node.PropertyValues)
            {
                source.Append(indent);
                source.Append("\t");
                source.Append(propertyValue.Key);
                source.Append(" = ");
                source.Append(AstMofGenerator.ConvertPropertyValueAst(propertyValue.Value, quirks, indent + "\t"));
                source.Append(";");
                source.AppendLine();
            }
            // }
            source.Append(indent);
            source.Append("}");
            return(source.ToString());
        }
コード例 #26
0
        public static string ConvertToMof(ParameterDeclarationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if (node.Qualifiers.Qualifiers.Count > 0)
            {
                source.AppendFormat("{0} ", MofGenerator.ConvertToMof(node.Qualifiers, quirks));
            }
            source.AppendFormat("{0} ", node.Type.Name);
            if (node.IsRef)
            {
                source.AppendFormat("{0} ", Keywords.REF);
            }
            source.Append(node.Name.Name);
            if (node.IsArray)
            {
                source.Append("[]");
            }
            if (node.DefaultValue != null)
            {
                source.AppendFormat(" = {0}", MofGenerator.ConvertToMof(node.DefaultValue, quirks));
            }
            return(source.ToString());
        }
コード例 #27
0
        public static string ConvertToMof(ClassDeclarationAst node, MofQuirks quirks = MofQuirks.None)
        {
            var source = new StringBuilder();

            if ((node.Qualifiers != null) && node.Qualifiers.Qualifiers.Count > 0)
            {
                source.AppendLine(MofGenerator.ConvertToMof(node.Qualifiers, quirks));
            }
            if (node.Superclass == null)
            {
                source.AppendFormat("class {0}\r\n", node.ClassName.Name);
            }
            else
            {
                source.AppendFormat("class {0} : {1}\r\n", node.ClassName.Name, node.Superclass.Name);
            }
            source.AppendLine("{");
            foreach (var feature in node.Features)
            {
                source.AppendFormat("\t{0}\r\n", MofGenerator.ConvertToMof(feature, quirks));
            }
            source.AppendLine("};");
            return(source.ToString());
        }
コード例 #28
0
 public static string ConvertToMof(NullValueAst node, MofQuirks quirks = MofQuirks.None)
 {
     return(node.Token.Extent.Text);
 }
コード例 #29
0
 public static string ConvertToMof(ReferenceTypeValueAst node, MofQuirks quirks = MofQuirks.None)
 {
     return(string.Format("!!!!!{0}!!!!!", node.GetType().Name));
 }
コード例 #30
0
 public static string ConvertToMof(StringValueAst node, MofQuirks quirks = MofQuirks.None)
 {
     return(string.Format("\"{0}\"", MofGenerator.EscapeString(node.Value)));
 }