Example #1
0
        public SRegex(string pattern, SRegexOptions options = SRegexOptions.Default)
        {
            var ast = Language.Parse(new SreSyntax(), pattern).Result.Node;
            switch (options)
            {
                case SRegexOptions.ByteCodeCompilation:
                    var compiler = new NfaVMBytecodeBackend(ast);
                    matcher = (int[] input) =>
                        {
                            var vm = new PikeNfaVM(compiler.Code.ToArray());
                            vm.Feed(input.Select(ch => (int)ch)).Done();
                            return vm.HasMatch;
                        };
                    break;
                case SRegexOptions.ILCompilation:
                    string methodName = "MatchSrePattern" + PatternID++;

                    var builder = new CachedMethod<MatchDelegate>(
                        methodName,
                        (emit, args) => EmitAst(emit, ast, args[0]));

                    matcher = builder.Delegate;
                    break;
                case SRegexOptions.NfaCompilation:
                    var nfa = new Nfa(ast);
                    matcher = nfa.Match;
                    break;
                case SRegexOptions.DfaCompilation:
                    var dfa = new RegularToDfaAlgorithm(new RegularTree(ast));
                    var simulation = new DfaSimulation(dfa.Data);
                    matcher = input => simulation.Match(input);
                    break;
            }
        }
Example #2
0
        public SRegex(string pattern, SRegexOptions options = SRegexOptions.Default)
        {
            var ast = Language.Parse(new SreSyntax(), pattern).Result.Node;

            switch (options)
            {
            case SRegexOptions.ByteCodeCompilation:
                var compiler = new NfaVMBytecodeBackend(ast);
                matcher = (int[] input) =>
                {
                    var vm = new PikeNfaVM(compiler.Code.ToArray());
                    vm.Feed(input.Select(ch => (int)ch)).Done();
                    return(vm.HasMatch);
                };
                break;

            case SRegexOptions.ILCompilation:
                string methodName = "MatchSrePattern" + PatternID++;

                var builder = new CachedMethod <MatchDelegate>(
                    methodName,
                    (emit, args) => EmitAst(emit, ast, args[0]));

                matcher = builder.Delegate;
                break;

            case SRegexOptions.NfaCompilation:
                var nfa = new Nfa(ast);
                matcher = nfa.Match;
                break;

            case SRegexOptions.DfaCompilation:
                var dfa        = new RegularToDfaAlgorithm(new RegularTree(ast));
                var simulation = new DfaSimulation(dfa.Data);
                matcher = input => simulation.Match(input);
                break;
            }
        }