memoizatio on user defined parsers
This commit is contained in:
@@ -5,7 +5,7 @@ from gll.result import Success, Failure
|
||||
|
||||
class Parser:
|
||||
def __init__(self, fun, tag=None):
|
||||
self.fun = fun
|
||||
self.fun = memoize(fun)
|
||||
self.tag = tag
|
||||
|
||||
def __call__(self, string):
|
||||
@@ -36,7 +36,6 @@ class Parser:
|
||||
|
||||
|
||||
def string(match, tag="string"):
|
||||
@memoize
|
||||
@rename("string_{}".format(match))
|
||||
def internal(string):
|
||||
ln = len(match)
|
||||
@@ -56,7 +55,6 @@ def regex(match, tag="regex", reopts=None):
|
||||
reopts = []
|
||||
rx = re.compile(match, *reopts)
|
||||
|
||||
@memoize
|
||||
@rename("regex_{}".format(match))
|
||||
def internal(string):
|
||||
res = rx.match(string)
|
||||
@@ -68,7 +66,6 @@ def regex(match, tag="regex", reopts=None):
|
||||
|
||||
|
||||
def digit(tag="digit"):
|
||||
@memoize
|
||||
@rename("digit")
|
||||
def internal(string):
|
||||
if not string:
|
||||
@@ -82,7 +79,6 @@ def digit(tag="digit"):
|
||||
|
||||
|
||||
def many(parser, tag="many"):
|
||||
@memoize
|
||||
@rename("many_{}".format(parser.name))
|
||||
def internal(string):
|
||||
res = parser(string)
|
||||
@@ -100,7 +96,6 @@ def many(parser, tag="many"):
|
||||
|
||||
|
||||
def many1(parser, tag="many1"):
|
||||
@memoize
|
||||
@rename("many1_{}".format(parser.name))
|
||||
def internal(string):
|
||||
res = parser(string)
|
||||
@@ -118,7 +113,6 @@ def many1(parser, tag="many1"):
|
||||
|
||||
|
||||
def whitespace(tag="whitespace"):
|
||||
@memoize
|
||||
@rename("whitespace")
|
||||
def internal(string):
|
||||
if not string:
|
||||
@@ -132,7 +126,6 @@ def whitespace(tag="whitespace"):
|
||||
|
||||
|
||||
def skip(parser, tag="skip"):
|
||||
@memoize
|
||||
@rename("skip_{}".format(parser.name))
|
||||
def internal(string):
|
||||
res = parser(string)
|
||||
@@ -148,7 +141,6 @@ def skipmany(parser, tag="skipmany"):
|
||||
|
||||
|
||||
def sep_by(separator, parser, tag="sep_by"):
|
||||
@memoize
|
||||
@rename("{}_sep_by_{}".format(parser.name, separator.name))
|
||||
def internal(string):
|
||||
if not string:
|
||||
@@ -172,7 +164,6 @@ def sep_by(separator, parser, tag="sep_by"):
|
||||
|
||||
|
||||
def opt(parser, tag="opt"):
|
||||
@memoize
|
||||
@rename("opt_{}".format(parser.name))
|
||||
def internal(string):
|
||||
res = parser(string)
|
||||
@@ -183,7 +174,6 @@ def opt(parser, tag="opt"):
|
||||
|
||||
|
||||
def seq(*parsers, tag="seq"):
|
||||
@memoize
|
||||
@rename("seq_{}".format("_".join(str(parser.name) for parser in parsers)))
|
||||
def internal(string):
|
||||
resl = []
|
||||
@@ -199,7 +189,6 @@ def seq(*parsers, tag="seq"):
|
||||
|
||||
|
||||
def all(parser, tag="all"):
|
||||
@memoize
|
||||
@rename("all_{}".format(parser.name))
|
||||
def internal(string):
|
||||
res = parser(string)
|
||||
|
Reference in New Issue
Block a user