コード例 #1
0
ファイル: DslProcessor.cs プロジェクト: smartfish/PT.PM
        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);
        }
コード例 #2
0
ファイル: DslProcessor.cs プロジェクト: Yikez978/PT.PM
        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);
        }
コード例 #3
0
ファイル: DslUstConverter.cs プロジェクト: Yikez978/PT.PM
        public UstNode VisitPattern(DslParser.PatternContext context)
        {
            DslNode result;

            result = new DslNode(context.dslCode().Select(code => VisitDslCode(code)).ToList());
            return(result);
        }
コード例 #4
0
ファイル: DslUstConverter.cs プロジェクト: Yikez978/PT.PM
 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;
     }
 }
コード例 #5
0
 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;
     }
 }
コード例 #6
0
ファイル: DslAntlrParser.cs プロジェクト: Yikez978/PT.PM
        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);
        }
コード例 #7
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);
        }
コード例 #8
0
 public PatternUst VisitPattern(DslParser.PatternContext context)
 {
     return(VisitDslCode(context.dslCode(0)));
 }