diff --git a/dragonfly/parsing/grammar.lark b/dragonfly/parsing/grammar.lark index 71448ec4..4cbb1bad 100644 --- a/dragonfly/parsing/grammar.lark +++ b/dragonfly/parsing/grammar.lark @@ -4,7 +4,7 @@ ?alternative: sequence ("|" sequence)* ?sequence: single* -?single: WORD -> literal +?single: WORD+ -> literal | "<" WORD ">" -> reference | "[" alternative "]" -> optional | "(" alternative ")" diff --git a/dragonfly/test/test_lark_parser.py b/dragonfly/test/test_lark_parser.py index 2232ea61..188945c4 100644 --- a/dragonfly/test/test_lark_parser.py +++ b/dragonfly/test/test_lark_parser.py @@ -8,7 +8,7 @@ # =========================================================================== -extras = {"an_extra": Alternative([Literal("1"), Literal("2")])} +extras = {"an_extra": Alternative([Literal(u"1"), Literal(u"2")])} def check_parse_tree(spec, expected): @@ -19,20 +19,20 @@ def check_parse_tree(spec, expected): class TestLarkParser(unittest.TestCase): def test_literal(self): - check_parse_tree("test ", Literal("test")) + check_parse_tree("test ", Literal(u"test")) def test_parens(self): - check_parse_tree("(test ) ", Literal("test")) + check_parse_tree("(test ) ", Literal(u"test")) def test_punctuation(self): - check_parse_tree(",", Literal(",")) - check_parse_tree("test's ", Literal("test's")) - check_parse_tree("cul-de-sac ", Literal("cul-de-sac")) + check_parse_tree(",", Literal(u",")) + check_parse_tree("test's ", Literal(u"test's")) + check_parse_tree("cul-de-sac ", Literal(u"cul-de-sac")) def test_sequence(self): check_parse_tree( " test [op]", - Sequence([Literal("test"), extras["an_extra"], Optional(Literal("op"))]), + Sequence([Literal(u"test"), extras["an_extra"], Optional(Literal(u"op"))]), ) def test_alternative_no_parens(self): @@ -40,8 +40,8 @@ def test_alternative_no_parens(self): " test |[op] ", Alternative( [ - Literal("test"), - Sequence([Optional(Literal("op")), extras["an_extra"]]), + Literal(u"test"), + Sequence([Optional(Literal(u"op")), extras["an_extra"]]), ] ), ) @@ -51,17 +51,17 @@ def test_alternative_parens(self): "( test |[op] )", Alternative( [ - Literal("test"), - Sequence([Optional(Literal("op")), extras["an_extra"]]), + Literal(u"test"), + Sequence([Optional(Literal(u"op")), extras["an_extra"]]), ] ), ) def test_optional_alternative(self): - check_parse_tree("[test|test's]", Optional(Alternative([Literal("test"), Literal("test's")]))) + check_parse_tree("[test|test's]", Optional(Alternative([Literal(u"test"), Literal(u"test's")]))) def test_digit_in_word(self): - check_parse_tree("F2", Literal("F2")) + check_parse_tree("F2", Literal(u"F2")) def test_unicode(self): check_parse_tree(u"touché", Literal(u"touché"))