mirror of https://github.com/lark-parser/lark.git
Some cleanup
This commit is contained in:
parent
c17558dd91
commit
c14435ac95
|
@ -1,8 +1,6 @@
|
||||||
from ..common import ParseError, UnexpectedToken, is_terminal
|
from ..common import ParseError, UnexpectedToken, is_terminal
|
||||||
from .grammar_analysis import GrammarAnalyzer
|
from .grammar_analysis import GrammarAnalyzer
|
||||||
|
|
||||||
# is_terminal = callable
|
|
||||||
|
|
||||||
class Item:
|
class Item:
|
||||||
def __init__(self, rule, ptr, start, data):
|
def __init__(self, rule, ptr, start, data):
|
||||||
self.rule = rule
|
self.rule = rule
|
||||||
|
@ -47,7 +45,6 @@ class Parser:
|
||||||
return {Item(rule, index, i, []) for rule, index in self.predictions[symbol]}
|
return {Item(rule, index, i, []) for rule, index in self.predictions[symbol]}
|
||||||
|
|
||||||
def complete(item, table):
|
def complete(item, table):
|
||||||
#item.data = (item.rule_ptr.rule, item.data)
|
|
||||||
item.data = self.postprocess[item.rule](item.data)
|
item.data = self.postprocess[item.rule](item.data)
|
||||||
return {old_item.advance(item.data) for old_item in table[item.start]
|
return {old_item.advance(item.data) for old_item in table[item.start]
|
||||||
if not old_item.is_complete and old_item.expect == item.rule.origin}
|
if not old_item.is_complete and old_item.expect == item.rule.origin}
|
||||||
|
@ -84,7 +81,6 @@ class Parser:
|
||||||
table.append(next_set)
|
table.append(next_set)
|
||||||
|
|
||||||
# Main loop starts
|
# Main loop starts
|
||||||
|
|
||||||
table = [predict(self.start, 0)]
|
table = [predict(self.start, 0)]
|
||||||
|
|
||||||
for i, char in enumerate(stream):
|
for i, char in enumerate(stream):
|
||||||
|
@ -100,44 +96,3 @@ class Parser:
|
||||||
raise ParseError('Incomplete parse: Could not find a solution to input')
|
raise ParseError('Incomplete parse: Could not find a solution to input')
|
||||||
|
|
||||||
return solutions
|
return solutions
|
||||||
#return map(self.reduce_solution, solutions)
|
|
||||||
|
|
||||||
def reduce_solution(self, solution):
|
|
||||||
rule, children = solution
|
|
||||||
children = [self.reduce_solution(c) if isinstance(c, tuple) else c for c in children]
|
|
||||||
return self.postprocess[rule](children)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from ..common import ParserConf
|
|
||||||
# A = 'A'.__eq__
|
|
||||||
# rules = [
|
|
||||||
# ('a', ['a', A], None),
|
|
||||||
# ('a', ['a', A, 'a'], None),
|
|
||||||
# ('a', ['a', A, A, 'a'], None),
|
|
||||||
# ('a', [A], None),
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# p = Parser(ParserConf(rules, None, 'a'))
|
|
||||||
# for x in p.parse('AAAA'):
|
|
||||||
# print '->'
|
|
||||||
# print x.pretty()
|
|
||||||
|
|
||||||
# import re
|
|
||||||
# NUM = re.compile('[0-9]').match
|
|
||||||
# ADD = re.compile('[+-]').match
|
|
||||||
# MUL = re.compile('[*/]').match
|
|
||||||
# rules = [
|
|
||||||
# ('sum', ['sum', ADD, 'product'], None),
|
|
||||||
# ('sum', ['product'], None),
|
|
||||||
# ('product', ['product', MUL, 'factor'], None),
|
|
||||||
# ('product', ['factor'], None),
|
|
||||||
# ('factor', ['('.__eq__, 'sum', ')'.__eq__], None),
|
|
||||||
# ('factor', ['number'], None),
|
|
||||||
# ('number', [NUM, 'number'], None),
|
|
||||||
# ('number', [NUM], None),
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# p = Parser(ParserConf(rules, None, 'sum'))
|
|
||||||
# # print p.parse('NALNMNANR')
|
|
||||||
# print p.parse('1+(2*3-4)')[0].pretty()
|
|
||||||
|
|
Loading…
Reference in New Issue