Browse Source

All tests pass now (local testing)

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.9.0
julienmalard 4 years ago
parent
commit
382489e020
1 changed files with 17 additions and 2 deletions
  1. +17
    -2
      lark/utils.py

+ 17
- 2
lark/utils.py View File

@@ -165,14 +165,29 @@ def smart_decorator(f, create_decorator):
else: else:
return create_decorator(f.__func__.__call__, True) return create_decorator(f.__func__.__call__, True)


try:
import regex
except ImportError:
regex = None

import sys, re import sys, re
Py36 = (sys.version_info[:2] >= (3, 6)) Py36 = (sys.version_info[:2] >= (3, 6))


import sre_parse import sre_parse
import sre_constants import sre_constants
categ_pattern = re.compile(r'\\p{[A-Za-z_]+}')
def get_regexp_width(regexp): def get_regexp_width(regexp):
if regex:
# Since `sre_parse` cannot deal with Unicode categories of the form `\p{Mn}`, we replace these with
# a simple letter, which makes no difference as we are only trying to get the possible lengths of the regex
# match here below.
regexp_final = re.sub(categ_pattern, 'A', regexp)
else:
if re.search(categ_pattern, regexp):
raise ImportError('`regex` module must be installed in order to use Unicode categories.', regexp)
regexp_final = regexp
try: try:
return [int(x) for x in sre_parse.parse(regexp).getwidth()]
return [int(x) for x in sre_parse.parse(regexp_final).getwidth()]
except sre_constants.error: except sre_constants.error:
raise ValueError(regexp) raise ValueError(regexp)


@@ -182,7 +197,7 @@ def get_regexp_width(regexp):
def dedup_list(l): def dedup_list(l):
"""Given a list (l) will removing duplicates from the list, """Given a list (l) will removing duplicates from the list,
preserving the original order of the list. Assumes that preserving the original order of the list. Assumes that
the list entrie are hashable."""
the list entries are hashable."""
dedup = set() dedup = set()
return [ x for x in l if not (x in dedup or dedup.add(x))] return [ x for x in l if not (x in dedup or dedup.add(x))]




Loading…
Cancel
Save