Fixed #29: Parsers: Implement parsing memoization
Fixed #77 : Parser: ShortTermMemoryParser should be called separately Fixed #78 : Remove VariableNode usage Fixed #79 : ConceptManager: Implement compile caching Fixed #80 : SheerkaExecute : parsers_key is not correctly computed Fixed #81 : ValidateConceptEvaluator : Validate concept's where and pre clauses right after the parsing Fixed #82 : SheerkaIsAManager: isa() failed when the set as a body Fixed #83 : ValidateConceptEvaluator : Support BNF and SYA Concepts Fixed #84 : ExpressionParser: Implement the parser as a standard parser Fixed #85 : Services: Give order to services Fixed #86 : cannot manage smart_get_attr(the short, color)
This commit is contained in:
@@ -9,8 +9,10 @@ from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.tokenizer import Token, TokenKind, Tokenizer
|
||||
from core.var_ref import VariableRef
|
||||
from parsers.BaseNodeParser import ConceptNode, UnrecognizedTokensNode, RuleNode, VariableNode
|
||||
from parsers.BnfNodeParser import BnfNodeParser
|
||||
from parsers.PythonParser import PythonNode
|
||||
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
||||
from parsers.SequenceNodeParser import SequenceNodeParser
|
||||
from parsers.UnrecognizedNodeParser import UnrecognizedNodeParser
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
from tests.parsers.parsers_utils import get_source_code_node
|
||||
@@ -226,3 +228,39 @@ class TestPythonWithConceptsParser(TestUsingMemoryBasedSheerka):
|
||||
assert result_python_node.ast_str == PythonNode.get_dump(expected_ast)
|
||||
assert result_python_node.original_source == "not foo == 1 and bar < 1"
|
||||
assert result_python_node.objects == {"__C__foo__C__": foo, "__C__bar__C__": bar}
|
||||
|
||||
def test_can_parse_after_unrecognized_bnf(self):
|
||||
sheerka, context, one, two, twenties = self.init_concepts(
|
||||
Concept("one", body="1"),
|
||||
Concept("two", body="2"),
|
||||
Concept("twenties", definition="'twenty' (one|two)=n", body='20 + n').def_var("n"),
|
||||
create_new=True
|
||||
)
|
||||
|
||||
bnf_parser_ret_val = BnfNodeParser().parse(context, ParserInput("a + twenty one"))
|
||||
unrec_node_ret_val = UnrecognizedNodeParser().parse(context, bnf_parser_ret_val.body)
|
||||
|
||||
parser = PythonWithConceptsParser()
|
||||
result = parser.parse(context, unrec_node_ret_val.body)
|
||||
|
||||
assert result.status
|
||||
python_node = result.body.body
|
||||
assert isinstance(python_node, PythonNode)
|
||||
assert python_node.source == 'a + __C__twenties__1003__C__'
|
||||
assert "__C__twenties__1003__C__" in python_node.objects
|
||||
|
||||
def test_i_cannot_parse_unrecognized_sequence(self):
|
||||
sheerka, context, one, two, twenties = self.init_concepts(
|
||||
Concept("one", body="1"),
|
||||
Concept("two", body="2"),
|
||||
Concept("twenties", definition="'twenty' (one|two)=n", body='20 + n').def_var("n"),
|
||||
create_new=True
|
||||
)
|
||||
|
||||
sequence_parser_ret_val = SequenceNodeParser().parse(context, ParserInput("a + twenty one"))
|
||||
unrec_node_ret_val = UnrecognizedNodeParser().parse(context, sequence_parser_ret_val.body)
|
||||
|
||||
parser = PythonWithConceptsParser()
|
||||
result = parser.parse(context, unrec_node_ret_val.body)
|
||||
|
||||
assert not result.status
|
||||
|
||||
Reference in New Issue
Block a user