Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using ParsecSharp;
- using ParsecSharp.Internal;
- namespace ParsecSharp.Extensions
- {
- public static class Parser
- {
- public static Parser<TToken, T> Memoize<TToken, T>(Parser<TToken, T> parser)
- {
- var cache = new Dictionary<IParsecStateStream<TToken>, Result<TToken, T>>();
- return Builder.GetState<TToken>()
- .Bind(state => (cache.TryGetValue(state, out var result))
- ? Builder.Create<TToken, T>(_ => result)
- : parser.ModifyResult(
- (_, fail) => { cache[state] = fail; return fail; },
- (_, success) => { cache[state] = success; return success; }));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement