public PatternRoot Deserialize(CodeFile data) { if (string.IsNullOrEmpty(data.Code)) { throw new ParsingException(data, message: "Pattern value can not be empty."); } var parser = new DslAntlrParser() { Logger = Logger }; var converter = new DslUstConverter { Logger = Logger, PatternExpressionInsideStatement = PatternExpressionInsideStatement, Data = data }; DslParser.PatternContext patternContext = parser.Parse(data.Code); PatternRoot patternNode = converter.Convert(patternContext); patternNode.CodeFile = data; var preprocessor = new PatternNormalizer() { Logger = Logger }; patternNode = preprocessor.Normalize(patternNode); return(patternNode); }
public UstNode Deserialize(string data, LanguageFlags sourceLanguage) { if (string.IsNullOrEmpty(data)) { throw new ParsingException("Pattern value can not be empty.") { IsPattern = true }; } Parser.Logger = Logger; UstConverter.Logger = Logger; DslParser.PatternContext patternContext = Parser.Parse(data); UstConverter.SourceLanguage = sourceLanguage; UstConverter.Data = data; DslNode dslNode = UstConverter.Convert(patternContext); UstNode result = dslNode.Collection.First(); ResultPatternVars = dslNode.PatternVarDefs; var preprocessor = new UstPreprocessor(); preprocessor.Logger = Logger; result = new PatternNode(result, dslNode.PatternVarDefs); result = preprocessor.Preprocess(result); return(result); }
public UstNode VisitPattern(DslParser.PatternContext context) { DslNode result; result = new DslNode(context.dslCode().Select(code => VisitDslCode(code)).ToList()); return(result); }
public DslNode Convert(DslParser.PatternContext pattern) { try { unnamedVarNumber = 0; patternVarDefs = new Dictionary <string, PatternVarDef>(); var result = (DslNode)VisitPattern(pattern); result.PatternVarDefs = patternVarDefs.Select(keyValue => keyValue.Value).ToList(); return(result); } catch (Exception ex) { Logger.LogError(new ConversionException("Pattern", ex) { IsPattern = true }); throw; } }
public PatternRoot Convert(DslParser.PatternContext pattern) { try { patternVars = new Dictionary <string, PatternVar>(); var result = new PatternRoot { Node = VisitPattern(pattern), Languages = new HashSet <Language>(LanguageUtils.PatternLanguages.Values) }; var ascendantsFiller = new PatternAscendantsFiller(result); ascendantsFiller.FillAscendants(); return(result); } catch (Exception ex) when(!(ex is ThreadAbortException)) { Logger.LogError(new ConversionException(Data, ex)); throw; } }
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); }
public PatternUst VisitPattern(DslParser.PatternContext context) { return(VisitDslCode(context.dslCode(0))); }