Просмотр исходного кода

Fix #696 now providing the correct amount of placeholders

remotes/origin/gm/2021-09-23T00Z/github.com--lark-parser-lark/master
ornariece 3 лет назад
Родитель
Сommit
c3fc2266e1
2 измененных файлов: 13 добавлений и 5 удалений
  1. +4
    -5
      lark/load_grammar.py
  2. +9
    -0
      tests/test_parser.py

+ 4
- 5
lark/load_grammar.py Просмотреть файл

@@ -231,12 +231,11 @@ class EBNF_to_BNF(Transformer_InPlace):
return not sym.name.startswith('_')
if isinstance(sym, Terminal):
return keep_all_tokens or not sym.filter_out
assert False
if isinstance(sym, Symbol):
return False
assert False, sym

if any(rule.scan_values(will_not_get_removed)):
empty = _EMPTY
else:
empty = ST('expansion', [])
empty = ST('expansion', [_EMPTY] * len(list(rule.scan_values(will_not_get_removed))))

return ST('expansions', [rule, empty])



+ 9
- 0
tests/test_parser.py Просмотреть файл

@@ -2293,6 +2293,15 @@ def _make_parser_test(LEXER, PARSER):
self.assertEqual(p.parse("abba").children, ['a', None, 'b', 'b', 'a', None])
self.assertEqual(p.parse("cbbbb").children, [None, 'c', 'b', 'b', 'b', 'b', None, None])

p = _Lark("""!start: ["a" "b" "c"] """, maybe_placeholders=True)
self.assertEqual(p.parse("").children, [None, None, None])
self.assertEqual(p.parse("abc").children, ['a', 'b', 'c'])

p = _Lark("""!start: ["a" ["b" "c"]] """, maybe_placeholders=True)
self.assertEqual(p.parse("").children, [None, None, None])
self.assertEqual(p.parse("a").children, ['a', None, None])
self.assertEqual(p.parse("abc").children, ['a', 'b', 'c'])


def test_escaped_string(self):
"Tests common.ESCAPED_STRING"


Загрузка…
Отмена
Сохранить