Exemple #1
0
        public ClaferParserCoeus(string input)
        {
            entry = new InputQueue(input);
            ClaferClassNode lex = analyser.BuildLexicon(entry);

            entry.Pointer = 0;

            BuildAtlas(lex);
        }
Exemple #2
0
 private bool ReadAbstract(ClaferClassNode abstractNode)
 {
     if (abstractNode.Derivations.First().Type == ClaferClasses.ReservedWord)
     {
         entry.Pop();
         return(true);
     }
     return(false);
 }
Exemple #3
0
 private void ReadElements(ClaferClassNode elements, AtlasFeature feature)
 {
     if (elements.Type == ClaferClasses.Elements && elements.Derivations[0].Type != ClaferClasses.Epsilon)
     {
         entry.Pop();
         ReadListElement(elements.Derivations[1], feature);
         entry.Pop();
     }
 }
Exemple #4
0
 private void ReadListElement(ClaferClassNode listElement, AtlasFeature feature)
 {
     if (listElement.Type == ClaferClasses.ListElement)
     {
         if (listElement.Derivations[0].Type != ClaferClasses.Epsilon)
         {
             ReadClafer(listElement.Derivations[0].Derivations[0], feature);
             ReadListElement(listElement.Derivations[1], feature);
         }
     }
 }
Exemple #5
0
        private void ReadDeclaration(ClaferClassNode declaration)
        {
            if (declaration.Type == ClaferClasses.Declaration)
            {
                ClaferClassNode clafer = declaration.Derivations.First();

                if (clafer.Type == ClaferClasses.Clafer)
                {
                    ReadClafer(clafer);
                }
            }
        }
Exemple #6
0
        private void ReadClafer(ClaferClassNode clafer)
        {
            bool   isAbstract = ReadAbstract(clafer.Derivations[0]);
            string name       = ReadIdent(clafer.Derivations[2]);

            AtlasFeature feature = new AtlasFeature(name);

            feature.IsAbstract = isAbstract;

            atlas.CreateFeatureModel(feature);

            ReadElements(clafer.Derivations[5], feature);
        }
Exemple #7
0
        private void BuildAtlas(ClaferClassNode lex)
        {
            atlas = new AtlasFeatureModel();

            if (lex.Type == ClaferClasses.Module)
            {
                lex = lex.Derivations.First();
                if (lex.Type == ClaferClasses.ListDeclaration)
                {
                    ReadDeclaration(lex.Derivations[0]);
                }
            }
        }
Exemple #8
0
        private void ReadClafer(ClaferClassNode clafer, AtlasFeature feature)
        {
            bool isAbstract          = ReadAbstract(clafer.Derivations[0]);
            AtlasConnectionType type = ReadGCard(clafer.Derivations[1]);
            string name = ReadIdent(clafer.Derivations[2]);

            AtlasFeature newFeature = new AtlasFeature(name);

            newFeature.IsAbstract = isAbstract;

            atlas.AddFeature(newFeature, feature, type);

            ReadElements(clafer.Derivations[5], newFeature);
        }
Exemple #9
0
        private AtlasConnectionType ReadGCard(ClaferClassNode gCard)
        {
            if (gCard.Derivations.First().Type == ClaferClasses.ReservedWord)
            {
                string switchKey = entry.Pop();
                switch (switchKey)
                {
                case "mux":
                    return(AtlasConnectionType.Optional);

                case "xor":
                    return(AtlasConnectionType.Alternative);

                case "or":
                    return(AtlasConnectionType.OrRelation);
                }
            }
            return(AtlasConnectionType.Mandatory);
        }
Exemple #10
0
 private string ReadIdent(ClaferClassNode ident)
 {
     return(entry.Pop());
 }