Bläddra i källkod

A few more adaptations

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.5.3
Erez Shinan 6 år sedan
förälder
incheckning
3d8b8b4725
4 ändrade filer med 11 tillägg och 19 borttagningar
  1. +0
    -15
      lark/parser_frontends.py
  2. +8
    -1
      lark/parsers/cyk.py
  3. +2
    -1
      lark/parsers/earley.py
  4. +1
    -2
      lark/tree.py

+ 0
- 15
lark/parser_frontends.py Visa fil

@@ -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):


+ 8
- 1
lark/parsers/cyk.py Visa fil

@@ -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):


+ 2
- 1
lark/parsers/earley.py Visa fil

@@ -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


+ 1
- 2
lark/tree.py Visa fil

@@ -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)


Laddar…
Avbryt
Spara