Exemple #1
0
        private void ParseAndCaptureErrors()
        {
            var dslParser = new DslParser(tokenizer, new Lazy <DslSyntax>(() => rhetosProjectContext.DslSyntax), rhetosLogProvider);

            try
            {
                dslParser.OnKeyword       += OnKeyword;
                dslParser.OnMemberRead    += OnMemberRead;
                dslParser.OnUpdateContext += OnUpdateContext;
                _ = dslParser.GetConcepts().ToList();
            }
            catch (DslSyntaxException e)
            {
                result.DslParserErrors.Add(CreateAnalysisError(e));
            }
            catch (Exception e)
            {
                result.DslParserErrors.Add(new CodeAnalysisError {
                    Message = e.ToString()
                });
            }
            finally
            {
                dslParser.OnKeyword       -= OnKeyword;
                dslParser.OnMemberRead    -= OnMemberRead;
                dslParser.OnUpdateContext -= OnUpdateContext;
            }
        }
        public void ExcludeEventExpr()
        {
            var result = DslParser.EventExprParse().Parse("event ! x,y");

            result.Should().NotBeNull().And.BeOfType <GroupExpr.ExcludeGroupExpr>();
            result.Dependent.Should().NotBeNull();
            result.Dependent.Should().BeEquivalentTo("x", "y");
        }
        public void DeliveryProtocolExpr()
        {
            const string protocol = "email";
            var          result   = DslParser.DeliveryProtocolExprParse().Parse("protocol " + protocol);

            result.Should().NotBeNull();
            result.Value.ShouldBeEquivalentTo(protocol);
        }
        public void TimeParse_WithEmptySeconds()
        {
            var result = DslParser.TimeParse().Parse("01:02");

            result.Hours.Should().Be(1);
            result.Minutes.Should().Be(2);
            result.Seconds.Should().Be(0);
        }
        public void DateParse()
        {
            var result = DslParser.DateParse().Parse("2015-08-09");

            result.Year.Should().Be(2015);
            result.Month.Should().Be(8);
            result.Day.Should().Be(9);
        }
        public void SelectItemParse_NameValue()
        {
            var result = DslParser.SelectItemExprParse().Parse("alpha = beta");

            result.Should().NotBeNull();
            result.Name.Should().Be("alpha");
            result.Value.Should().Be("beta");
        }
        public void SelectItemParse_ValueWithPoints()
        {
            var result = DslParser.SelectItemExprParse().Parse("beta.gamma.theta");

            result.Should().NotBeNull();
            result.Name.Should().BeNull();
            result.Value.Should().Be("beta.gamma.theta");
        }
        public void OrderExprItemParse_Descending()
        {
            var result = DslParser.OrderExprItemParse().Parse("#alpha# desc");

            result.Should().NotBeNull();
            result.OrderFieldName.Should().Be("alpha");
            result.SortOrder.Should().Be(SortOrder.Descending);
        }
        public void NotificationReportExpr()
        {
            const long reportId = 21499234;
            var        result   = DslParser.NotificationReportIdParse().Parse("report " + reportId);

            result.Should().NotBeNull();
            result.Value.ShouldBeEquivalentTo(reportId);
        }
        public void TimeParse()
        {
            var result = DslParser.TimeParse().Parse("01:02:03");

            result.Hours.Should().Be(1);
            result.Minutes.Should().Be(2);
            result.Seconds.Should().Be(3);
        }
        public void TimeShiftParse()
        {
            var result = DslParser.TimeShiftParse().Parse("1d2h3m4s");

            result.Days.Should().Be(1);
            result.Hours.Should().Be(2);
            result.Minutes.Should().Be(3);
            result.Seconds.Should().Be(4);
        }
        public void AllSubjectsExpr()
        {
            var result = DslParser.SubjectsExprParse().Parse("subjects all");

            result.Should().NotBeNull();
            result.Roles.Should().BeNullOrEmpty();
            result.SubjectGroups.Should().BeNullOrEmpty();
            result.Persons.Should().BeNullOrEmpty();
            result.IsAll.Should().BeTrue();
        }
        public void FullSubjectsExpr_NotRolesGroups()
        {
            var result = DslParser.SubjectsExprParse().Parse(@"subjects
person max, andr");

            result.Should().NotBeNull();
            result.Roles.Should().BeNullOrEmpty();
            result.SubjectGroups.Should().BeNullOrEmpty();
            result.Persons.Should().BeEquivalentTo("max", "andr");
        }
Exemple #14
0
        private static IEnumerable <ConceptSyntaxNode> DslParserParse(string[] dslScripts, Type[] conceptTypes)
        {
            var dslParser = new DslParser(
                new TestTokenizer(dslScripts),
                new Lazy <DslSyntax>(() => DslSyntaxHelper.CreateDslSyntax(conceptTypes)),
                new ConsoleLogProvider());
            var parsedConcepts = dslParser.GetConcepts();

            Console.WriteLine("Parsed concepts: " + string.Join("\r\n", parsedConcepts.Select(c => c.Concept.TypeName)));
            return(parsedConcepts);
        }
Exemple #15
0
        private static IEnumerable <IConceptInfo> DslParserParse(params string[] dsl)
        {
            var dslParser = new DslParser(
                new Tokenizer(new MockDslScriptsProvider(dsl)),
                new IConceptInfo[] { new SimpleConceptInfo() },
                new ConsoleLogProvider());
            var parsedConcepts = dslParser.ParsedConcepts;

            Console.WriteLine("Parsed concepts: " + string.Join("\r\n", dslParser.ParsedConcepts));
            return(parsedConcepts);
        }
Exemple #16
0
        static List <IConceptInfo> DslModelFromScript(string dsl, IConceptInfo[] conceptInfoPluginsForGenericParser)
        {
            var nullDslParser = new DslParser(new Tokenizer(new MockDslScriptsProvider(dsl)), conceptInfoPluginsForGenericParser, new ConsoleLogProvider());

            Console.WriteLine("Parsed concepts:");
            Console.WriteLine(string.Join(Environment.NewLine, nullDslParser.ParsedConcepts.Select(ci => " - " + ci.GetShortDescription())));

            var dslModel = NewDslModel(nullDslParser, conceptInfoPluginsForGenericParser);

            return(dslModel.Concepts.ToList());
        }
        public void AnyEventExpr()
        {
            var result = DslParser.EventExprParse().Parse("event any");

            result.Should().NotBeNull();
            result.Should().BeOfType <GroupExpr.AnyGroupExpr>();

            result.Dependent.Should().NotBeNull();

            // ReSharper disable once RedundantExplicitParamsArrayCreation
            result.Dependent.Should().BeEquivalentTo(new string[0]);
        }
        public void DateTimeParse_WithEmptySeconds()
        {
            var result = DslParser.DateTimeParse().Parse("2015-10-11 04:05");

            result.Year.Should().Be(2015);
            result.Month.Should().Be(10);
            result.Day.Should().Be(11);

            result.Hour.Should().Be(4);
            result.Minute.Should().Be(5);
            result.Second.Should().Be(0);
        }
        public void OrderExprParse()
        {
            var result = DslParser.OrderExprParse().Parse(@"order #alpha# asc, #beta# desc
select
select end");

            result.Should().NotBeNull();
            result.Items.Should().HaveCount(2);
            result.Items[0].OrderFieldName.Should().Be("alpha");
            result.Items[0].SortOrder.Should().Be(SortOrder.Ascending);

            result.Items[1].OrderFieldName.Should().Be("beta");
            result.Items[1].SortOrder.Should().Be(SortOrder.Descending);
        }
        static List <IConceptInfo> DslModelFromScript(string dsl, IConceptInfo[] conceptInfoPluginsForGenericParser)
        {
            var nullDslParser = new DslParser(
                new TestTokenizer(dsl),
                new Lazy <DslSyntax>(() => DslSyntaxHelper.CreateDslSyntax(conceptInfoPluginsForGenericParser)),
                new ConsoleLogProvider());

            Console.WriteLine("Parsed concepts:");
            Console.WriteLine(string.Join(Environment.NewLine, nullDslParser.GetConcepts().Select(ci => " - " + ci.GetUserDescription())));

            var dslModel = NewDslModel(nullDslParser, conceptInfoPluginsForGenericParser);

            return(dslModel.Concepts.ToList());
        }
        public void TimeTriggerExprParse_WithoutRepeat()
        {
            var result = DslParser.TimeTriggerExprParse().Parse("trigger 2015-08-09 01:02:03");

            result.Start.Year.Should().Be(2015);
            result.Start.Month.Should().Be(8);
            result.Start.Day.Should().Be(9);

            result.Start.Hour.Should().Be(1);
            result.Start.Minute.Should().Be(2);
            result.Start.Second.Should().Be(3);

            result.Repeat.HasValue.Should().BeFalse();
        }
        public void FullSubjectsExpr_NotGroups()
        {
            var result = DslParser.SubjectsExprParse().Parse(@"subjects
role alpha; not beta, gamma
role u
person max, andr");

            result.Should().NotBeNull();
            result.Roles.Should().HaveCount(2);
            result.Roles[0].RoleName.Should().Be("alpha");
            result.Roles[0].ExcludedPersons.Should().BeEquivalentTo("beta", "gamma");
            result.Roles[1].RoleName.Should().Be("u");
            result.Roles[1].ExcludedPersons.Should().BeEmpty();
            result.SubjectGroups.Should().BeNullOrEmpty();
            result.Persons.Should().BeEquivalentTo("max", "andr");
        }
        public void FullSubjectsExpr_NotRoles()
        {
            var result = DslParser.SubjectsExprParse().Parse(@"subjects
group theta; not eta
group f
person max, andr");

            result.Should().NotBeNull();
            result.Roles.Should().BeNullOrEmpty();
            result.SubjectGroups.Should().HaveCount(2);
            result.SubjectGroups[0].GroupName.Should().Be("theta");
            result.SubjectGroups[0].ExcludedPersons.Should().BeEquivalentTo("eta");
            result.SubjectGroups[1].GroupName.Should().Be("f");
            result.SubjectGroups[1].ExcludedPersons.Should().BeEmpty();
            result.Persons.Should().BeEquivalentTo("max", "andr");
        }
        public void TimeTriggerExprParse()
        {
            var result = DslParser.TimeTriggerExprParse().Parse("trigger 2015-08-09 01:02:03 repeat 4d5h6m7s");

            result.Start.Year.Should().Be(2015);
            result.Start.Month.Should().Be(8);
            result.Start.Day.Should().Be(9);

            result.Start.Hour.Should().Be(1);
            result.Start.Minute.Should().Be(2);
            result.Start.Second.Should().Be(3);

            result.Repeat.HasValue.Should().BeTrue();
            result.Repeat?.Days.Should().Be(4);
            result.Repeat?.Hours.Should().Be(5);
            result.Repeat?.Minutes.Should().Be(6);
            result.Repeat?.Seconds.Should().Be(7);
        }
        public void AttachExprParse()
        {
            const string expr = @"report 123
format snmp
parameters
a: b;";

            var result = DslParser.ParseReportAttachmentBlockExpr().Parse(expr);

            result.ReportId.ShouldBeEquivalentTo(123);
            result.ExportFormat.ShouldBeEquivalentTo("snmp");
            result.Parameters.Should().HaveCount(1);

            var param = result.Parameters.First();

            param.Key.ShouldBeEquivalentTo("a");
            param.Value.ShouldBeEquivalentTo("b");
        }
Exemple #26
0
        private static void Main(string[] args)
        {
            var wsbFile                        = args.Length >= 1 ? args[0] : "Schema.mic";
            var basePathToSolution             = args.Length >= 2 ? args[1] : "../";
            var domainNameSpace                = "Domain";
            var applicationNameSpace           = "Application";
            var sqlAdapterNameSpace            = "SqlAdapter";
            var webAdapterNameSpace            = "HttpAdapter";
            var domainBasePath                 = $"{basePathToSolution}{domainNameSpace}/Generated/";
            var applicationBasePath            = $"{basePathToSolution}{applicationNameSpace}/Generated/";
            var applicationRealClassesBasePath = $"{basePathToSolution}{applicationNameSpace}/";
            var domainRealClassesBasePath      = $"{basePathToSolution}{domainNameSpace}/";
            var sqlAdapterBasePath             = $"{basePathToSolution}{sqlAdapterNameSpace}/Generated/";
            var webAdapterBasePath             = $"{basePathToSolution}{webAdapterNameSpace}/Generated/";
            var asynHostBasePath               = $"{basePathToSolution}AsyncHost";
            var injectionBasePath              = $"{basePathToSolution}Host";

            var tokenizer         = new MicrowaveLanguageTokenizer();
            var parser            = new MicrowaveLanguageParser();
            var domainBuilder     = new DomainWriter(domainBasePath, domainRealClassesBasePath);
            var applicationWriter = new ApplicationWriter(applicationNameSpace, applicationBasePath, applicationRealClassesBasePath);
            var sqlAdapterWriter  = new SqlAdapterWriter(sqlAdapterNameSpace, sqlAdapterBasePath);
            var webAdapterWriter  = new HttpAdapterWriter(webAdapterNameSpace, webAdapterBasePath);
            var dependencyInjectionWriterAsyncHost = new DependencyInjectionBuilderAsyncHost();

            var dependencyInjectionWriter = new DependencyInjectionBuilderHost();

            using (var reader = new StreamReader(wsbFile))
            {
                var content = reader.ReadToEnd();

                var dslParser  = new DslParser(tokenizer, parser);
                var domainTree = dslParser.Parse(content);

                domainBuilder.Write(domainTree, domainBasePath);
                applicationWriter.Write(domainTree);
                sqlAdapterWriter.Write(domainTree);
                webAdapterWriter.Write(domainTree);
                var codeNamespace = dependencyInjectionWriter.Build(domainTree.Classes, domainTree.SynchronousDomainHooks);
                new FileWriter(injectionBasePath).WriteToFile("Base/", codeNamespace);
                var write = dependencyInjectionWriterAsyncHost.Write(domainTree.Classes, domainTree.AsyncDomainHooks);
                new FileWriter(asynHostBasePath).WriteToFile("Base/", write);
            }
        }
        private void ParseAndCaptureErrors()
        {
            try
            {
                var dslParser = new DslParser(tokenizer, rhetosAppContext.ConceptInfoInstances, rhetosLogProvider, new BuildOptions());

                dslParser.ParseConceptsWithCallbacks(OnKeyword, OnMemberRead, OnUpdateContext);
            }
            catch (DslSyntaxException e)
            {
                result.DslParserErrors.Add(CreateAnalysisError(e));
            }
            catch (Exception e)
            {
                result.DslParserErrors.Add(new CodeAnalysisError()
                {
                    LineChr = LineChr.Zero, Message = e.Message
                });
            }
        }
        public void SubjectsExpr_NotPersons()
        {
            var result = DslParser.SubjectsExprParse().Parse(@"subjects
role alpha; not beta, gamma
role u
group theta; not eta
group f");

            result.Should().NotBeNull();
            result.Roles.Should().HaveCount(2);
            result.Roles[0].RoleName.Should().Be("alpha");
            result.Roles[0].ExcludedPersons.Should().BeEquivalentTo("beta", "gamma");
            result.Roles[1].RoleName.Should().Be("u");
            result.Roles[1].ExcludedPersons.Should().BeEmpty();
            result.SubjectGroups.Should().HaveCount(2);
            result.SubjectGroups[0].GroupName.Should().Be("theta");
            result.SubjectGroups[0].ExcludedPersons.Should().BeEquivalentTo("eta");
            result.SubjectGroups[1].GroupName.Should().Be("f");
            result.SubjectGroups[1].ExcludedPersons.Should().BeEmpty();
            result.Persons.Should().BeNullOrEmpty();
        }
        public void SelectParse()
        {
            var result = DslParser.SelectExprParse().Parse(@"select
alpha = #beta#
#gamma#@my own
theta = #eta.sigma.pi#
#x.y.z#
select end");

            result.Should().NotBeNull();

            var dslFormatBlock = result as DslFormatBlock;

            result.Should().NotBeNull();

            dslFormatBlock.Selects.Should().NotBeNullOrEmpty();
            dslFormatBlock.Selects.Should().HaveCount(4);

            var first = dslFormatBlock.Selects.First();

            first.Name.Should().Be("alpha");
            first.Value.Should().Be("#beta#");

            var second = dslFormatBlock.Selects.Skip(1).First();

            second.Name.Should().BeNull();
            second.Value.Should().Be("#gamma#");
            second.DisplayName.Should().Be("my own");

            var third = dslFormatBlock.Selects.Skip(2).First();

            third.Name.Should().Be("theta");
            third.Value.Should().Be("#eta.sigma.pi#");

            var fourth = dslFormatBlock.Selects.Skip(3).First();

            fourth.Name.Should().BeNull();
            fourth.Value.Should().Be("#x.y.z#");
        }
Exemple #30
0
        public DslParser.PatternContext Parse(string data)
        {
            DslParser.PatternContext pattern = null;
            var errorListener = new AntlrMemoryErrorListener()
            {
                IsPattern = true
            };

            errorListener.FileName = "Pattern";
            errorListener.FileData = data;
            errorListener.Logger   = Logger;
            try
            {
                var      inputStream = new AntlrInputStream(data);
                DslLexer lexer       = new DslLexer(inputStream);

                lexer.RemoveErrorListeners();
                lexer.AddErrorListener(errorListener);

                var       tokenStream = new CommonTokenStream(lexer);
                DslParser parser      = new DslParser(tokenStream);
                parser.RemoveErrorListeners();
                parser.AddErrorListener(errorListener);
                pattern = parser.pattern();
            }
            catch (Exception ex)
            {
                Logger.LogError(new ParsingException("Pattern", ex)
                {
                    IsPattern = true
                });
                throw;
            }

            return(pattern);
        }
Exemple #31
0
 private static IEnumerable<IConceptInfo> DslParserParse(params string[] dsl)
 {
     var dslParser = new DslParser(
         new Tokenizer(new MockDslScriptsProvider(dsl)),
         new IConceptInfo[] { new SimpleConceptInfo() },
         new ConsoleLogProvider());
     var parsedConcepts = dslParser.ParsedConcepts;
     Console.WriteLine("Parsed concepts: " + string.Join("\r\n", dslParser.ParsedConcepts));
     return parsedConcepts;
 }