/// <summary> /// Parse the given input into a description of a sequence diagram. /// </summary> /// <param name="input">The input string</param> /// <returns></returns> public static (SequenceDiagramViewModel SequenceDiagram, string Error) Parse(string input) { var inputStream = new CaseInsensitiveInputStream(input); var lexer = new SequenceLexer(inputStream); var tokenStream = new CommonTokenStream(lexer); var parser = new SequenceParser(tokenStream); // Report errors to the console (for now) var error = new StringBuilder(); var errorListener = new StringErrorListener(error); lexer.AddErrorListener(errorListener); parser.AddErrorListener(errorListener); // Generate SequenceDiagramViewModel out of parsed result StartContext startContext = parser.start(); SequenceVisitor visitor = new SequenceVisitor(errorListener); visitor.Visit(startContext); return(visitor.SequenceDiagram, error.ToString()); }