Fixed #9 : I can parse 'def concept'
This commit is contained in:
@@ -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):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user