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); }
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); }
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); }