Resolved some remaining chicken and egg when parsing BNF nodes
This commit is contained in:
@@ -26,7 +26,7 @@ cmap = {
|
||||
"one hundred": Concept("one hundred", body="100"),
|
||||
"one_hundred": Concept("'one hundred'", body="100"),
|
||||
"hundreds": Concept("hundreds", definition="number=n1 'hundred' 'and' number=n2",
|
||||
where="n1 < 10 and n2 < 100", body="n1 * 100 + n2"),
|
||||
where="n1 < 10 and n2 < 100", body="n1 * 100 + n2").def_var("n1").def_var("n2"),
|
||||
|
||||
"bnf baz": Concept("bnf baz", definition="'baz'"), # this one should be chosen
|
||||
|
||||
@@ -103,6 +103,7 @@ class TestBnfNodeParser(TestUsingMemoryBasedSheerka):
|
||||
sheerka.set_isa(context, sheerka.new("forty"), sheerka.new("number"))
|
||||
sheerka.set_isa(context, sheerka.new("fifty"), sheerka.new("number"))
|
||||
sheerka.set_isa(context, sheerka.new("one hundred"), sheerka.new("number"))
|
||||
sheerka.set_isa(context, sheerka.new("hundreds"), sheerka.new("number"))
|
||||
|
||||
# Pay attention. 'twenties (t1 and t2) are not set as number
|
||||
|
||||
@@ -848,7 +849,7 @@ class TestBnfNodeParser(TestUsingMemoryBasedSheerka):
|
||||
parsing_expression = parser.get_parsing_expression(context, my_map["foo"])
|
||||
assert sheerka.isinstance(parsing_expression, BuiltinConcepts.CHICKEN_AND_EGG)
|
||||
assert sheerka.isinstance(parser.concepts_grammars.get(my_map["foo"].id), BuiltinConcepts.CHICKEN_AND_EGG)
|
||||
assert parser.concepts_grammars.get(my_map["foo"].id).body == {"1001", "1002", "1003", "1004"}
|
||||
assert parser.concepts_grammars.get(my_map["foo"].id).body == ["1001", "1002", "1003", "1004", "1001"]
|
||||
|
||||
assert sheerka.isinstance(parser.concepts_grammars.get(my_map["bar"].id), BuiltinConcepts.CHICKEN_AND_EGG)
|
||||
assert sheerka.isinstance(parser.concepts_grammars.get(my_map["baz"].id), BuiltinConcepts.CHICKEN_AND_EGG)
|
||||
|
||||
@@ -214,3 +214,25 @@ class TestBnfParser(TestUsingMemoryBasedSheerka):
|
||||
assert not res.status
|
||||
assert context.sheerka.isinstance(res.value, BuiltinConcepts.UNKNOWN_CONCEPT)
|
||||
assert res.value.body == ('key', 'foo')
|
||||
|
||||
def test_concept_expression_are_correctly_created_when_isa_concept_is_detected(self):
|
||||
sheerka, context, parser, one, two, number, twenties = self.init_parser(
|
||||
"one",
|
||||
"two",
|
||||
"number",
|
||||
"twenties")
|
||||
|
||||
sheerka.set_isa(context, sheerka.new("one"), number)
|
||||
sheerka.set_isa(context, sheerka.new("two"), number)
|
||||
sheerka.set_isa(context, sheerka.new("twenties"), number)
|
||||
|
||||
sub_context = context.push(BuiltinConcepts.INIT_BNF, twenties)
|
||||
|
||||
expression = "'twenty' number=n1"
|
||||
res = parser.parse(sub_context, Tokenizer(expression))
|
||||
|
||||
assert not parser.has_error
|
||||
assert res.status
|
||||
pexpression = res.value.value
|
||||
assert pexpression == Sequence(StrMatch('twenty'), ConceptExpression(number, "n1"))
|
||||
assert pexpression.elements[1].recurse_id == "1003#n1#1004"
|
||||
|
||||
Reference in New Issue
Block a user