Example #1
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);
        }
Example #2
0
        public DslParser.PatternContext Parse(string patternKey, string data)
        {
            DslParser.PatternContext pattern = null;
            var sourceFile = new TextFile(data)
            {
                PatternKey = patternKey ?? data
            };
            var errorListener = new AntlrMemoryErrorListener()
            {
                IsPattern  = true,
                SourceFile = sourceFile,
                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) when(!(ex is ThreadAbortException))
            {
                Logger.LogError(new ParsingException(sourceFile, ex));
                throw;
            }

            return(pattern);
        }
Example #3
0
        static void Main(string[] args)
        {
            string code = @"

when [ToPractice] is 'cardiology of bob'

*[Insurance] is 'blue cross' +[Insurance] is 'blah' +[Insurance] is 'blah3'
*[DocumentCount] greater than 1
*[DocumentCount] less than 3

when [ToPractice] is 'test'
*[DocumentCount] greater than 10
            
";

            var lexer  = new DslLexer(new ANTLRStringStream(code));
            var tokens = new CommonTokenStream(lexer);

            var parser = new DslParser(tokens);

            parser.TreeAdaptor = new BridgeAdapter();
            var result = parser.program();

            //Generate .dot graph. View it at http://mdaines.github.io/viz.js/
            var graphGenerator = new DotTreeGenerator();
            var dotFile        = graphGenerator.ToDot(result.Tree);

            if (lexer.Errors.Count > 0)
            {
                foreach (var error in lexer.Errors)
                {
                    Console.WriteLine(error);
                }

                return;
            }

            if (parser.Errors.Count > 0)
            {
                foreach (var error in parser.Errors)
                {
                    Console.WriteLine(error);
                }

                return;
            }

            var bridge = new BridgeVisitor(result.Tree);
            var ast    = bridge.CreateAst();

            var codeGen  = new CodeGenVisitor(ast);
            var codeUnit = codeGen.Generate();

            //Code Gen;
            string codeString = Persist.ToCSharpSource(codeUnit);

            //Compile
            var persist  = new Persist(codeUnit);
            var assembly = persist.ToAssembly();

            if (persist.Errors.Count > 0)
            {
                foreach (var error in persist.Errors)
                {
                    Console.WriteLine(error);
                }

                return;
            }

            //Run
            var instance   = assembly.CreateInstance("Code");
            var method     = assembly.GetType("Code").GetMethod("Run");
            var methodArgs = new Args {
                ToPractice = "test", Insurance = "blue cross", DocumentCount = 5
            };
            var codeResult = (bool)method.Invoke(instance, new[] { methodArgs });

            Console.WriteLine(codeResult);
        }