Browse Source

CYK also working

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.7.2
Erez Shinan 5 years ago
parent
commit
bcc4e67bce
2 changed files with 9 additions and 7 deletions
  1. +2
    -2
      lark/parser_frontends.py
  2. +7
    -5
      lark/parsers/cyk.py

+ 2
- 2
lark/parser_frontends.py View File

@@ -194,13 +194,13 @@ class CYK(WithLexer):
self.init_traditional_lexer()

self._analysis = GrammarAnalyzer(parser_conf)
self._parser = cyk.Parser(parser_conf.rules, parser_conf.start)
self.parser = cyk.Parser(parser_conf.rules)

self.callbacks = parser_conf.callbacks

def parse(self, text, start):
tokens = list(self.lex(text))
parse = self._parser.parse(tokens)
parse = self._parse(tokens, start)
parse = self._transform(parse)
return parse



+ 7
- 5
lark/parsers/cyk.py View File

@@ -84,12 +84,11 @@ class RuleNode(object):
class Parser(object):
"""Parser wrapper."""

def __init__(self, rules, start):
def __init__(self, rules):
super(Parser, self).__init__()
self.orig_rules = {rule: rule for rule in rules}
rules = [self._to_rule(rule) for rule in rules]
self.grammar = to_cnf(Grammar(rules))
self.start = NT(start[0])

def _to_rule(self, lark_rule):
"""Converts a lark rule, (lhs, rhs, callback, options), to a Rule."""
@@ -100,13 +99,16 @@ class Parser(object):
weight=lark_rule.options.priority if lark_rule.options and lark_rule.options.priority else 0,
alias=lark_rule)

def parse(self, tokenized): # pylint: disable=invalid-name
def parse(self, tokenized, start): # pylint: disable=invalid-name
"""Parses input, which is a list of tokens."""
assert start
start = NT(start)

table, trees = _parse(tokenized, self.grammar)
# Check if the parse succeeded.
if all(r.lhs != self.start for r in table[(0, len(tokenized) - 1)]):
if all(r.lhs != start for r in table[(0, len(tokenized) - 1)]):
raise ParseError('Parsing failed.')
parse = trees[(0, len(tokenized) - 1)][self.start]
parse = trees[(0, len(tokenized) - 1)][start]
return self._to_tree(revert_cnf(parse))

def _to_tree(self, rule_node):


Loading…
Cancel
Save