Fixed #9 : I can parse 'def concept'

This commit is contained in:
2023-06-11 09:45:44 +02:00
parent 62391f786e
commit ba397b0b72
22 changed files with 3043 additions and 93 deletions
+19 -15
View File
@@ -11,8 +11,9 @@ from core.BuiltinConcepts import BuiltinConcepts
from core.ExecutionContext import ExecutionContext
from core.ReturnValue import ReturnValue
from core.concept import Concept, ConceptDefaultPropsAttrs, ConceptMetadata, DefinitionType
from core.error import ErrorContext, SheerkaException
from parsers.tokenizer import TokenKind, Tokenizer, strip_tokens
from core.error import ErrorContext, ErrorObj
from parsers.parser_utils import strip_tokens
from parsers.tokenizer import TokenKind, Tokenizer
from services.BaseService import BaseService
PROPERTIES_FOR_DIGEST = ("name", "key",
@@ -22,26 +23,25 @@ PROPERTIES_FOR_DIGEST = ("name", "key",
"desc", "bound_body", "autouse", "props", "variables", "parameters")
class ConceptAlreadyDefined(SheerkaException):
def __init__(self, concept: ConceptMetadata, already_defined_id: str):
self.concept = concept
self.already_defined_id = already_defined_id
@dataclass
class ConceptAlreadyDefined(ErrorObj):
concept: ConceptMetadata
already_defined_id: str
def get_error_msg(self) -> str:
return f"Concept {self.concept.name}, is already defined (id={self.already_defined_id})"
@dataclass
class InvalidBnf(SheerkaException):
def __init__(self, bnf: str):
self.bnf = bnf
class InvalidBnf(ErrorObj):
bnf: str
def get_error_msg(self) -> str:
return f"Invalid bnf '{self.bnf}'"
@dataclass
class FirstItemError(SheerkaException):
class FirstItemError(ErrorObj):
pass
@@ -78,6 +78,7 @@ class ConceptManager(BaseService):
self.sheerka.bind_service_method(self.NAME, self.get_by_name, False)
self.sheerka.bind_service_method(self.NAME, self.get_by_id, False)
self.sheerka.bind_service_method(self.NAME, self.get_by_key, False)
self.sheerka.bind_service_method(self.NAME, self.is_a_concept_name, False)
register_concept_cache = self.sheerka.om.register_concept_cache
@@ -108,11 +109,11 @@ class ConceptManager(BaseService):
_(7, BuiltinConcepts.INVALID_CONCEPT, desc="invalid concept", variables=("concept_id", "reason"))
_(8, BuiltinConcepts.EVALUATION_ERROR, desc="evaluation error", variables=("concept", "reason"))
self.init_log.debug('%s builtin concepts created',
len(self.sheerka.om.current_cache_manager().concept_caches))
def define_new_concept(self, context: ExecutionContext,
def define_new_concept(self,
context: ExecutionContext,
name: str,
is_builtin: bool = False, # is the concept defined Sheerka
is_unique: bool = False, # is the concept a singleton
@@ -263,7 +264,7 @@ class ConceptManager(BaseService):
Returns a concept metadata, using its name
:param key:
:type key:
:return:
:return: NotFound if not found
:rtype:
"""
return self.sheerka.om.get(self.CONCEPTS_BY_NAME_ENTRY, key)
@@ -273,7 +274,7 @@ class ConceptManager(BaseService):
Returns a concept metadata, using its name
:param concept_id:
:type concept_id:
:return:
:return: NotFound if not found
:rtype:
"""
return self.sheerka.om.get(self.CONCEPTS_BY_ID_ENTRY, concept_id)
@@ -283,7 +284,7 @@ class ConceptManager(BaseService):
Returns a concept metadata, using its name
:param key:
:type key:
:return:
:return: NotFound if not found
:rtype:
"""
return self.sheerka.om.get(self.CONCEPTS_BY_KEY_ENTRY, key)
@@ -291,6 +292,9 @@ class ConceptManager(BaseService):
def get_all_concepts(self):
return list(sorted(self.sheerka.om.list(self.CONCEPTS_BY_ID_ENTRY), key=lambda item: int(item.id)))
def is_a_concept_name(self, name):
return self.sheerka.om.exists(self.CONCEPTS_BY_NAME_ENTRY, name)
@staticmethod
def compute_metadata_digest(metadata: ConceptMetadata):
"""