Browse Source

Raise a GrammarError on empty string literal.

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.12.0
MegaIng 3 years ago
parent
commit
c44bb3e0cd
2 changed files with 7 additions and 0 deletions
  1. +3
    -0
      lark/load_grammar.py
  2. +4
    -0
      tests/test_grammar.py

+ 3
- 0
lark/load_grammar.py View File

@@ -448,6 +448,9 @@ def _literal_to_pattern(literal):


s = eval_escaping(x) s = eval_escaping(x)


if s == "":
raise GrammarError("Can't have empty terminals (offending literal: %s)" % literal.value)

if literal.type == 'STRING': if literal.type == 'STRING':
s = s.replace('\\\\', '\\') s = s.replace('\\\\', '\\')
return PatternStr(s, flags, raw=literal.value) return PatternStr(s, flags, raw=literal.value)


+ 4
- 0
tests/test_grammar.py View File

@@ -22,6 +22,10 @@ class TestGrammar(TestCase):
else: else:
assert False, "example did not raise an error" assert False, "example did not raise an error"


def test_empty_literal(self):
# Issues #888
self.assertRaises(GrammarError, Lark, "start: \"\"")

def test_override_rule(self): def test_override_rule(self):
# Overrides the 'sep' template in existing grammar to add an optional terminating delimiter # Overrides the 'sep' template in existing grammar to add an optional terminating delimiter
# Thus extending it beyond its original capacity # Thus extending it beyond its original capacity


Loading…
Cancel
Save