public TokenFilterChain()
        {
            var langSpecificPattern   = new SingleTokenPattern(TokenType.LANG_SPECIFIC);
            var strDoubleQuotePattern = new StartEndTokensPattern(TokenType.DOUBLE_QUOTE, TokenType.DOUBLE_QUOTE);
            var strSingleQuotePattern = new StartEndTokensPattern(TokenType.SINGLE_QUOTE, TokenType.SINGLE_QUOTE);

            var elseIfPattern = TokenSequencePatternBuilder
                                .Reset()
                                .Then(TokenType.ELSE_OPERATOR)
                                .Then(TokenType.IF_OPERATOR)
                                .Build();

            var inputPattern = new StartEndTokensPattern(
                TokenType.INPUT_OPERATOR,
                TokenType.LINE_END);

            var outputPattern = new StartEndTokensPattern(
                TokenType.OUTPUT_OPERATOR,
                TokenType.LINE_END);

            var twoTextsPattern = TokenSequencePatternBuilder
                                  .Reset()
                                  .Then(TokenType.TEXT)
                                  .Then(TokenType.TEXT)
                                  .Build();

            Filters.AddRange(new List <TokenFilter>()
            {
                new RemoveTokensFilter(langSpecificPattern, TokenFilter.HighestPriority),

                new EditTokensFilter(TokensToTextTokenFilter, strDoubleQuotePattern, TokenFilter.PreHighestPriority),
                new EditTokensFilter(TokensToTextTokenFilter, strSingleQuotePattern, TokenFilter.PreHighestPriority),

                new EditTokensFilter(ElseIfMergeFilter, elseIfPattern, TokenFilter.PreHighestPriority),
                new EditTokensFilter(InOutPutTokenFilter, inputPattern, TokenFilter.PreHighestPriority),
                new EditTokensFilter(InOutPutTokenFilter, outputPattern, TokenFilter.PreHighestPriority),

                new EditTokensFilter(TokensToTextTokenFilter, twoTextsPattern, TokenFilter.LowestPriority)
            });
        }
Example #2
0
 public StartEndTokensPattern(TokenType startToken, TokenType endToken)
 {
     StartPattern = new SingleTokenPattern(startToken);
     EndPattern   = new SingleTokenPattern(endToken);
 }
        public CppTokenFilterChain()
        {
            var argsBlock = new TokensBlockWithExcludePatternBuilder()
                            .Reset()
                            .StartWith(TokenType.ARGS_OPEN)
                            .ExceptRange(
                Enum.GetValues(typeof(TokenType))
                .Cast <TokenType>()
                .Where(t => t.IsOperatorToken())
                .ToList())
                            .Except(TokenType.ACCESS_MODIFICATOR)
                            .EndWith(TokenType.ARGS_CLOSE)
                            .Build();

            var gotoLabelPattern = TokenSequencePatternBuilder
                                   .Reset()
                                   .Then(TokenType.IDENTIFIER)
                                   .Then(TokenType.DOUBLE_DOT)
                                   .Build();
            var gotoConstructionPattern = new StartEndTokensPattern(
                TokenType.RESERVE_5,
                TokenType.LINE_END);
            var accessModificatorPattern = TokenSequencePatternBuilder
                                           .Reset()
                                           .Then(TokenType.ACCESS_MODIFICATOR)
                                           .Then(TokenType.DOUBLE_DOT)
                                           .Build();
            var classQualifierPattern = TokenSequencePatternBuilder
                                        .Reset()
                                        .Then(TokenType.IDENTIFIER)
                                        .Then(TokenType.DOUBLE_DOT)
                                        .Then(TokenType.DOUBLE_DOT)
                                        .Build();
            var throwLinePattern = new StartEndTokensPattern(
                TokenType.THROW_OPERATOR,
                TokenType.LINE_END);
            var emptyObjVarsPattern = TokenSequencePatternBuilder
                                      .Reset()
                                      .Then(TokenType.IDENTIFIER)
                                      .Then(TokenType.IDENTIFIER)
                                      .Then(TokenType.LINE_END)
                                      .Build();
            var varDefPattern = TokenSequencePatternBuilder
                                .Reset()
                                .Then(TokenType.IDENTIFIER)
                                .Then(TokenType.LINE_END)
                                .Build();
            var castPattern = TokenSequencePatternBuilder
                              .Reset()
                              .Then(TokenType.ARGS_OPEN)
                              .Then(TokenType.IDENTIFIER)
                              .Then(TokenType.ARGS_CLOSE)
                              .Build();

            var catchBlockPattern = StrictPatternBuilder
                                    .Reset()
                                    .NextPattern(new SingleTokenPattern(TokenType.CATCH_OPERATOR))
                                    .NextPattern(argsBlock)
                                    .NextPattern(TokensBlockPattern.BracketBlock)
                                    .Build();

            var structDefPattern = StrictPatternBuilder
                                   .Reset()
                                   .NextPattern(TokenSequencePatternBuilder
                                                .Reset()
                                                .Then(TokenType.RESERVE_1)
                                                .Then(TokenType.IDENTIFIER)
                                                .Build())
                                   .NextPattern(TokensBlockPattern.BracketBlock)
                                   .Build();

            var structVarInitComboPattern = StrictPatternBuilder
                                            .Reset()
                                            .NextPattern(TokenSequencePatternBuilder
                                                         .Reset()
                                                         .Then(TokenType.IDENTIFIER)
                                                         .Then(TokenType.IDENTIFIER)
                                                         .Then(TokenType.EQUAL_ACTION)
                                                         .Build())
                                            .NextPattern(TokensBlockPattern.BracketBlock)
                                            .Build();

            var tryPattern = ComboPatternByFirstMatchBuilder
                             .Reset()
                             .NextPattern(new SingleTokenPattern(TokenType.TRY_OPERATOR))
                             .NextPattern(TokensBlockPattern.BracketBlock)
                             .Build();

            var classDefPattern = ComboPatternByFirstMatchBuilder
                                  .Reset()
                                  .NextPattern(new SingleTokenPattern(TokenType.CLASS_OPERATOR))
                                  .NextPattern(new SingleTokenPattern(TokenType.IDENTIFIER))
                                  .NextPattern(TokensBlockPattern.BracketBlock)
                                  .Build();

            var lineBreakFilter   = new SingleTokenPattern(TokenType.NEW_LINE);
            var tabFilter         = new SingleTokenPattern(TokenType.TABULATION);
            var carriageRetFilter = new SingleTokenPattern(TokenType.CARRIAGE_RETURN);

            Filters.AddRange(new List <TokenFilter>()
            {
                new RemoveTokensFilter(lineBreakFilter, TokenFilter.HighestPriority),
                new RemoveTokensFilter(tabFilter, TokenFilter.HighestPriority),
                new RemoveTokensFilter(carriageRetFilter, TokenFilter.HighestPriority),

                new RemoveTokensFilter(gotoLabelPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(gotoConstructionPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(catchBlockPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(structDefPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(structVarInitComboPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(accessModificatorPattern, TokenFilter.PreHighestPriority),
                new RemoveTokensFilter(classQualifierPattern, TokenFilter.PreHighestPriority),

                new StrictEditTokensFilter(FilterTryBlock, tryPattern),
                new StrictEditTokensFilter(ClassFilter, classDefPattern),

                new RemoveTokensFilter(throwLinePattern, TokenFilter.PreLowestPriority),
                new RemoveTokensFilter(castPattern, TokenFilter.PreLowestPriority),

                new RemoveTokensFilter(emptyObjVarsPattern, TokenFilter.LowestPriority),
                new RemoveTokensFilter(varDefPattern, TokenFilter.LowestPriority)
            });
        }