diff --git a/lark/parser_frontends.py b/lark/parser_frontends.py index 1356706..b7a3abc 100644 --- a/lark/parser_frontends.py +++ b/lark/parser_frontends.py @@ -4,7 +4,6 @@ from .utils import get_regexp_width from .parsers.grammar_analysis import GrammarAnalyzer from .lexer import Lexer, ContextualLexer, Token -from .common import GrammarError from .common import is_terminal, GrammarError from .parsers import lalr_parser, earley, xearley, resolve_ambig, cyk from .tree import Tree @@ -138,20 +137,6 @@ class XEarley: return self.parser.parse(text) -class Earley(WithLexer): - def __init__(self, lexer_conf, parser_conf, options=None): - self.init_traditional_lexer(lexer_conf) - - self.parser = earley.Parser(parser_conf, self.match, - resolve_ambiguity=get_ambiguity_resolver(options)) - - def match(self, term, token): - return term == token.type - - def parse(self, text): - tokens = self.lex(text) - return self.parser.parse(tokens) - class CYK(WithLexer): def __init__(self, lexer_conf, parser_conf, options=None): diff --git a/lark/parsers/cyk.py b/lark/parsers/cyk.py index fbd52a9..1f9a0fc 100644 --- a/lark/parsers/cyk.py +++ b/lark/parsers/cyk.py @@ -1,5 +1,10 @@ """This module implements a CYK parser.""" +# Author: https://github.com/ehudt (2018) +# +# Adapted by Erez + + from collections import defaultdict import itertools @@ -140,7 +145,9 @@ class Parser(object): else: assert isinstance(child.s, Token) children.append(child.s) - return Tree(orig_rule.origin, children, rule=orig_rule) + t = Tree(orig_rule.origin, children) + t.rule=orig_rule + return t def print_parse(node, indent=0): diff --git a/lark/parsers/earley.py b/lark/parsers/earley.py index 3586c22..62d3e15 100644 --- a/lark/parsers/earley.py +++ b/lark/parsers/earley.py @@ -22,7 +22,8 @@ class Derivation(Tree): _hash = None def __init__(self, rule, items=None): - Tree.__init__(self, 'drv', items or [], rule=rule) + Tree.__init__(self, 'drv', items or []) + self.rule = rule def _pretty_label(self): # Nicer pretty for debugging the parser return self.rule.origin if self.rule else self.data diff --git a/lark/tree.py b/lark/tree.py index 4814b92..a9d4670 100644 --- a/lark/tree.py +++ b/lark/tree.py @@ -9,10 +9,9 @@ from .utils import inline_args ###{standalone class Tree(object): - def __init__(self, data, children, rule=None): + def __init__(self, data, children): self.data = data self.children = list(children) - self.rule = rule def __repr__(self): return 'Tree(%s, %s)' % (self.data, self.children)