class AnalyzerElementsAnalysisVisitor
        extends DefaultTraversalVisitor<Void, CreateAnalyzerStatementAnalyzer.Context> {

        static final AnalyzerElementsAnalysisVisitor INSTANCE = new AnalyzerElementsAnalysisVisitor();

        static Void analyze(AnalyzerElement<Expression> node, Context context) {
            node.accept(INSTANCE, context);
            return null;
        }

        @Override
        public Void visitTokenizer(Tokenizer<?> node, Context context) {
            var tokenizer = (Tokenizer<Expression>) node;

            GenericProperties<Symbol> properties = tokenizer.properties()
                .map(p -> context.exprAnalyzerWithFieldsAsString.convert(p, context.exprContext));

            context.tokenizer = new Tuple<>(tokenizer.ident(), properties);
            return null;
        }

        @Override
        public Void visitGenericProperty(GenericProperty<?> node, Context context) {
            var property = (GenericProperty<Expression>) node;

            context.genericAnalyzerProperties.put(
                property.key(),
                context.exprAnalyzerWithFieldsAsString.convert(
                    property.value(),
                    context.exprContext)
            );
            return null;
        }

        @Override
        public Void visitTokenFilters(TokenFilters<?> node, Context context) {<FILL_FUNCTION_BODY>}

        @Override
        public Void visitCharFilters(CharFilters<?> node, Context context) {
            var charFilters = (CharFilters<Expression>) node;

            for (NamedProperties<Expression> charFilter : charFilters.charFilters()) {
                GenericProperties<Symbol> properties = charFilter.properties()
                    .map(p -> context.exprAnalyzerWithFieldsAsString.convert(p, context.exprContext));

                context.charFilters.put(charFilter.ident(), properties);
            }
            return null;
        }
    }

            var tokenFilters = (TokenFilters<Expression>) node;

            for (NamedProperties<Expression> tokenFilter : tokenFilters.tokenFilters()) {
                GenericProperties<Symbol> properties = tokenFilter.properties()
                    .map(p -> context.exprAnalyzerWithFieldsAsString.convert(p, context.exprContext));

                context.tokenFilters.put(tokenFilter.ident(), properties);
            }
            return null;
        
<no_super_class>