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