|
@@ -19,6 +19,7 @@ logging.basicConfig(level=logging.INFO) |
|
|
from lark.lark import Lark |
|
|
from lark.lark import Lark |
|
|
from lark.common import GrammarError, ParseError |
|
|
from lark.common import GrammarError, ParseError |
|
|
from lark.lexer import LexError |
|
|
from lark.lexer import LexError |
|
|
|
|
|
from lark.tree import Tree |
|
|
|
|
|
|
|
|
__path__ = os.path.dirname(__file__) |
|
|
__path__ = os.path.dirname(__file__) |
|
|
def _read(n, *args): |
|
|
def _read(n, *args): |
|
@@ -104,6 +105,21 @@ class TestEarley(unittest.TestCase): |
|
|
res = l.parse("aaa") |
|
|
res = l.parse("aaa") |
|
|
self.assertEqual(res.children, ['aaa']) |
|
|
self.assertEqual(res.children, ['aaa']) |
|
|
|
|
|
|
|
|
|
|
|
def test_earley_repeating_empty(self): |
|
|
|
|
|
# This was a sneaky bug! |
|
|
|
|
|
|
|
|
|
|
|
grammar = """ |
|
|
|
|
|
!start: "a" empty empty "b" |
|
|
|
|
|
empty: empty2 |
|
|
|
|
|
empty2: |
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
parser = Lark(grammar, parser='earley', lexer=None) |
|
|
|
|
|
res = parser.parse('ab') |
|
|
|
|
|
|
|
|
|
|
|
empty_tree = Tree('empty', [Tree('empty2', [])]) |
|
|
|
|
|
self.assertSequenceEqual(res.children, ['a', empty_tree, empty_tree, 'b']) |
|
|
|
|
|
|
|
|
def _make_parser_test(LEXER, PARSER): |
|
|
def _make_parser_test(LEXER, PARSER): |
|
|
def _Lark(grammar, **kwargs): |
|
|
def _Lark(grammar, **kwargs): |
|
|
return Lark(grammar, lexer=LEXER, parser=PARSER, **kwargs) |
|
|
return Lark(grammar, lexer=LEXER, parser=PARSER, **kwargs) |
|
|