Exemplo n.º 1
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended simple = SimpleOperatorName.Parse(context);

            if (simple != null)
            {
                return(simple);
            }

            RewindState rewind = context.RewindState;

            if (context.Parser.VerifyString("cv"))
            {
                IParsingResultExtended type = Type.Parse(context);

                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(new Cast(type));
            }

            if (context.Parser.VerifyString("li"))
            {
                IParsingResultExtended name = SourceName.Parse(context);

                if (name == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(new Literal(name));
            }

            if (context.Parser.VerifyString("v"))
            {
                if (!char.IsDigit(context.Parser.Peek))
                {
                    context.Rewind(rewind);
                    return(null);
                }

                int arity = context.Parser.Peek - '0';
                context.Parser.Position++;
                IParsingResultExtended name = SourceName.Parse(context);

                if (name == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(new VendorExtension(arity, name));
            }

            return(null);
        }
Exemplo n.º 2
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            RewindState rewind = context.RewindState;

            if (!context.Parser.VerifyString("N"))
            {
                return(null);
            }

            CvQualifiers           cvQualifiers = CvQualifiers.Parse(context);
            RefQualifier           refQualifier = RefQualifier.Parse(context);
            IParsingResultExtended prefix       = Parsers.Prefix.Parse(context);

            if (prefix == null)
            {
                context.Rewind(rewind);
                return(null);
            }

            if (!(prefix is Parsers.Prefix.NestedName) && !(prefix is Parsers.Prefix.Template))
            {
                context.Rewind(rewind);
                return(null);
            }

            if (!context.Parser.VerifyString("E"))
            {
                context.Rewind(rewind);
                return(null);
            }

            return(new NestedName(prefix, cvQualifiers, refQualifier));
        }
Exemplo n.º 3
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended name = UnscopedName.Parse(context);

            if (name != null)
            {
                context.SubstitutionTable.Add(name);
                return(name);
            }

            return(Substitution.Parse(context));
        }
Exemplo n.º 4
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            RewindState            rewind = context.RewindState;
            IParsingResultExtended name   = NestedName.Parse(context);

            if (name != null)
            {
                return(name);
            }

            name = UnscopedName.Parse(context);
            if (name != null)
            {
                if (context.Parser.Peek == 'I')
                {
                    context.SubstitutionTable.Add(name);
                    TemplateArgs args = TemplateArgs.Parse(context);

                    if (args == null)
                    {
                        context.Rewind(rewind);
                        return(null);
                    }

                    return(new UnscopedTemplate(name, args));
                }
                else
                {
                    return(name);
                }
            }

            name = UnscopedTemplateName.Parse(context);
            if (name != null)
            {
                TemplateArgs args = TemplateArgs.Parse(context);

                if (args == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(new UnscopedTemplate(name, args));
            }

            return(LocalName.Parse(context));
        }
Exemplo n.º 5
0
        public static IParsingResult Parse(ParsingContext context)
        {
            IParsingResultExtended name = Name.Parse(context);

            if (name != null)
            {
                BareFunctionType type = BareFunctionType.Parse(context);

                if (type != null)
                {
                    return(new Function(name, type));
                }

                return(name);
            }

            return(SpecialName.Parse(context));
        }
Exemplo n.º 6
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            RewindState rewind = context.RewindState;

            if (context.Parser.VerifyString("St"))
            {
                IParsingResultExtended name = UnqualifiedName.Parse(context);

                if (name == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(new Std(name));
            }

            return(UnqualifiedName.Parse(context));
        }
Exemplo n.º 7
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended substitution = Substitution.Parse(context);

            if (substitution != null)
            {
                return(substitution);
            }

            IParsingResultExtended parameter = TemplateParam.Parse(context);

            if (parameter != null)
            {
                IParsingResultExtended result = new TemplateTemplateParam(parameter);
                context.SubstitutionTable.Add(result);
                return(result);
            }
            return(null);
        }
Exemplo n.º 8
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended name = Name.Parse(context);

            if (name != null)
            {
                return(name);
            }

            RewindState rewind = context.RewindState;

            if (context.Parser.VerifyString("T"))
            {
                if (context.Parser.VerifyString("s"))
                {
                    name = Name.Parse(context);
                    if (name != null)
                    {
                        return(new ElaboratedStruct(name));
                    }
                }
                else if (context.Parser.VerifyString("u"))
                {
                    name = Name.Parse(context);
                    if (name != null)
                    {
                        return(new ElaboratedUnion(name));
                    }
                }
                else if (context.Parser.VerifyString("e"))
                {
                    name = Name.Parse(context);
                    if (name != null)
                    {
                        return(new ElaboratedEnum(name));
                    }
                }
            }

            context.Rewind(rewind);
            return(null);
        }
Exemplo n.º 9
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended type = StandardBuiltinType.Parse(context);

            if (type != null)
            {
                return(type);
            }

            RewindState rewind = context.RewindState;

            if (context.Parser.VerifyString("u"))
            {
                IParsingResultExtended name = SourceName.Parse(context);

                return(new Extension(name));
            }

            context.Rewind(rewind);
            return(null);
        }
Exemplo n.º 10
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended wellKnown = WellKnownComponent.Parse(context);

            if (wellKnown != null)
            {
                return(wellKnown);
            }

            RewindState rewind = context.RewindState;

            if (!context.Parser.VerifyString("S"))
            {
                return(null);
            }

            int number;

            if (!context.Parser.ParseNumberBase36(out number))
            {
                number = -1;
            }
            number++;


            if (!context.Parser.VerifyString("_") || !context.SubstitutionTable.Contains(number))
            {
                context.Rewind(rewind);
                return(null);
            }

            Substitution substitution = new Substitution(number);

            substitution.resolvedReference = context.SubstitutionTable.Substitutions[number];
            return(substitution);
        }
Exemplo n.º 11
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            RewindState            rewind = context.RewindState;
            IParsingResultExtended result = null;
            bool isResultTemplatePrefix   = false;

            while (!context.Parser.IsEnd)
            {
                bool isResultTemplatePrefixNext = false;

                switch (context.Parser.Peek)
                {
                case 'S':
                {
                    IParsingResultExtended substitution = Substitution.Parse(context);

                    if (substitution == null)
                    {
                        context.Rewind(rewind);
                        return(null);
                    }

                    result = substitution;
                }
                break;

                case 'T':
                {
                    IParsingResultExtended param = TemplateParam.Parse(context);

                    if (param == null)
                    {
                        context.Rewind(rewind);
                        return(null);
                    }

                    result = AddToSubstitutionTable(context, param);
                    isResultTemplatePrefixNext = true;
                }
                break;

                case 'D':
                {
                    IParsingResultExtended decltype = Decltype.Parse(context);

                    if (decltype != null)
                    {
                        result = AddToSubstitutionTable(context, decltype);
                    }
                    else
                    {
                        IParsingResultExtended name = UnqualifiedName.Parse(context);

                        if (name == null)
                        {
                            context.Rewind(rewind);
                            return(null);
                        }

                        if (result != null)
                        {
                            result = AddToSubstitutionTable(context, new NestedName(result, name));
                        }
                        else
                        {
                            result = AddToSubstitutionTable(context, name);
                        }
                        isResultTemplatePrefixNext = true;
                    }
                }
                break;

                default:
                    if (context.Parser.Peek == 'I' && result != null && isResultTemplatePrefix)
                    {
                        TemplateArgs arguments = TemplateArgs.Parse(context);

                        if (arguments == null)
                        {
                            context.Rewind(rewind);
                            return(null);
                        }

                        result = AddToSubstitutionTable(context, new Template(result, arguments));
                    }
                    else if (result != null && SourceName.StartsWith(context))
                    {
                        Debug.Assert(UnqualifiedName.StartsWith(context));
                        Debug.Assert(DataMemberPrefix.StartsWith(context));

                        IParsingResultExtended name = SourceName.Parse(context);

                        if (name == null)
                        {
                            context.Rewind(rewind);
                            return(null);
                        }

                        if (context.Parser.VerifyString("M"))
                        {
                            result = AddToSubstitutionTable(context, new DataMember(result, name));
                        }
                        else
                        {
                            if (result != null)
                            {
                                result = AddToSubstitutionTable(context, new NestedName(result, name));
                            }
                            else
                            {
                                result = AddToSubstitutionTable(context, name);
                            }
                            isResultTemplatePrefixNext = true;
                        }
                    }
                    else if (UnqualifiedName.StartsWith(context))
                    {
                        IParsingResultExtended name = UnqualifiedName.Parse(context);

                        if (name == null)
                        {
                            context.Rewind(rewind);
                            return(null);
                        }

                        if (result != null)
                        {
                            result = AddToSubstitutionTable(context, new NestedName(result, name));
                        }
                        else
                        {
                            result = AddToSubstitutionTable(context, name);
                        }
                        isResultTemplatePrefixNext = true;
                    }
                    else
                    {
                        if (result != null)
                        {
                            return(result);
                        }

                        context.Rewind(rewind);
                        return(null);
                    }
                    break;
                }
                isResultTemplatePrefix = isResultTemplatePrefixNext;
            }

            return(result);
        }
Exemplo n.º 12
0
 public Std(IParsingResultExtended name)
 {
     Name = name;
 }
Exemplo n.º 13
0
 public ElaboratedUnion(IParsingResultExtended name)
 {
     Name = name;
 }
Exemplo n.º 14
0
 public VendorExtension(int arity, IParsingResultExtended name)
 {
     Arity = arity;
     Name  = name;
 }
Exemplo n.º 15
0
        public static IParsingResultExtended Parse(ParsingContext context)
        {
            IParsingResultExtended type = BuiltinType.Parse(context);

            if (type != null)
            {
                return(type);
            }

            type = ClassEnumType.Parse(context);
            if (type != null)
            {
                return(AddToSubstitutionTable(context, type));
            }

            RewindState rewind = context.RewindState;

            type = Substitution.Parse(context);
            if (type != null)
            {
                if (context.Parser.Peek != 'I')
                {
                    return(type);
                }

                context.Rewind(rewind);
            }

            type = FunctionType.Parse(context) ?? ArrayType.Parse(context) ?? PointerToMemberType.Parse(context);
            if (type != null)
            {
                return(AddToSubstitutionTable(context, type));
            }

            type = TemplateParam.Parse(context);
            if (type != null)
            {
                if (context.Parser.Peek != 'I')
                {
                    return(AddToSubstitutionTable(context, type));
                }

                context.Rewind(rewind);
            }

            type = TemplateTemplateParam.Parse(context);
            if (type != null)
            {
                TemplateArgs arguments = TemplateArgs.Parse(context);

                if (arguments == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                return(AddToSubstitutionTable(context, new TemplateTemplate(type, arguments)));
            }

            type = Decltype.Parse(context);
            if (type != null)
            {
                return(type);
            }

            CvQualifiers qualifiers = CvQualifiers.Parse(context);

            if (qualifiers != null)
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                if (type is BuiltinType)
                {
                    return(new QualifiedBuiltin(qualifiers, type));
                }
                return(AddToSubstitutionTable(context, new Qualified(qualifiers, type)));
            }

            if (context.Parser.VerifyString("P"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new PointerTo(type)));
            }

            if (context.Parser.VerifyString("R"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new LvalueRef(type)));
            }

            if (context.Parser.VerifyString("O"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new RvalueRef(type)));
            }

            if (context.Parser.VerifyString("C"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new Complex(type)));
            }

            if (context.Parser.VerifyString("G"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new Imaginary(type)));
            }

            if (context.Parser.VerifyString("U"))
            {
                IParsingResult name = SourceName.Parse(context);

                if (name == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }

                TemplateArgs arguments = TemplateArgs.Parse(context);

                type = Parse(context);
                return(AddToSubstitutionTable(context, new VendorExtension(name, arguments, type)));
            }

            if (context.Parser.VerifyString("Dp"))
            {
                type = Parse(context);
                if (type == null)
                {
                    context.Rewind(rewind);
                    return(null);
                }
                return(AddToSubstitutionTable(context, new PackExtension(type)));
            }

            return(null);
        }
Exemplo n.º 16
0
 public NestedName(IParsingResultExtended previous, IParsingResultExtended name)
 {
     Previous = previous;
     Name     = name;
 }
Exemplo n.º 17
0
 public RvalueRef(IParsingResultExtended type)
 {
     Type = type;
 }
Exemplo n.º 18
0
 public Complex(IParsingResultExtended type)
 {
     Type = type;
 }
Exemplo n.º 19
0
 public Extension(IParsingResultExtended name)
 {
     Name = name;
 }
Exemplo n.º 20
0
 public Imaginary(IParsingResultExtended type)
 {
     Type = type;
 }
Exemplo n.º 21
0
 public NestedName(IParsingResultExtended prefix, CvQualifiers cvQualifiers, RefQualifier refQualifier)
 {
     Prefix       = prefix;
     CvQualifiers = cvQualifiers;
     RefQualifier = refQualifier;
 }
Exemplo n.º 22
0
 public PackExtension(IParsingResultExtended type)
 {
     Type = type;
 }
Exemplo n.º 23
0
 public TemplateTemplate(IParsingResultExtended type, TemplateArgs arguments)
 {
     Type      = type;
     Arguments = arguments;
 }
Exemplo n.º 24
0
 public Qualified(CvQualifiers qualifiers, IParsingResultExtended type)
 {
     CvQualifiers = qualifiers;
     Type         = type;
 }
Exemplo n.º 25
0
 private static IParsingResultExtended AddToSubstitutionTable(ParsingContext context, IParsingResultExtended result)
 {
     context.SubstitutionTable.Add(result);
     return(result);
 }
Exemplo n.º 26
0
 public Cast(IParsingResultExtended type)
 {
     Type = type;
 }
Exemplo n.º 27
0
 public DataMember(IParsingResultExtended name, IParsingResult member)
 {
     Name   = name;
     Member = member;
 }
Exemplo n.º 28
0
 public Literal(IParsingResultExtended name)
 {
     Name = name;
 }
Exemplo n.º 29
0
 public Template(IParsingResultExtended name, TemplateArgs arguments)
 {
     Name      = name;
     Arguments = arguments;
 }
Exemplo n.º 30
0
 public PointerTo(IParsingResultExtended type)
 {
     Type = type;
 }