Added concept 'isa' other_concept functionality
This commit is contained in:
@@ -96,6 +96,12 @@ class DefConceptNode(DefaultParserNode):
|
||||
return asts
|
||||
|
||||
|
||||
@dataclass()
|
||||
class IsaConceptNode(DefaultParserNode):
|
||||
concept: NameNode = NotInitializedNode()
|
||||
set: NameNode = NotInitializedNode()
|
||||
|
||||
|
||||
class DefaultParser(BaseParser):
|
||||
"""
|
||||
Parse sheerka specific grammar (like def concept)
|
||||
@@ -220,7 +226,7 @@ class DefaultParser(BaseParser):
|
||||
self.context.log(self.verbose_log, "Keyword DEF found.", self.name)
|
||||
return self.parse_def_concept(token)
|
||||
else:
|
||||
return self.add_error(CannotHandleErrorNode([], self.text))
|
||||
return self.parse_isa_concept()
|
||||
|
||||
def parse_def_concept(self, def_token):
|
||||
"""
|
||||
@@ -257,6 +263,35 @@ class DefaultParser(BaseParser):
|
||||
|
||||
return concept_found
|
||||
|
||||
def parse_isa_concept(self):
|
||||
concept_name = self.parse_concept_name()
|
||||
if isinstance(concept_name, DefaultParserErrorNode):
|
||||
return concept_name
|
||||
|
||||
keyword = []
|
||||
token = self.get_token()
|
||||
if token.value != Keywords.ISA:
|
||||
return self.add_error(CannotHandleErrorNode([token], ""))
|
||||
keyword.append(token)
|
||||
self.next_token()
|
||||
|
||||
set_name = self.parse_concept_name()
|
||||
return IsaConceptNode(keyword, concept_name, set_name)
|
||||
|
||||
def parse_concept_name(self):
|
||||
tokens = []
|
||||
token = self.get_token()
|
||||
|
||||
while not (token.type == TokenKind.EOF or token.type == TokenKind.KEYWORD):
|
||||
tokens.append(token)
|
||||
self.next_token()
|
||||
token = self.get_token()
|
||||
|
||||
if len(tokens) == 0:
|
||||
return self.add_error(UnexpectedTokenErrorNode([token], "Unexpected token", []))
|
||||
else:
|
||||
return NameNode(tokens)
|
||||
|
||||
def regroup_tokens_by_parts(self, keywords_tokens):
|
||||
|
||||
def_concept_parts = [Keywords.CONCEPT, Keywords.FROM, Keywords.AS, Keywords.WHERE, Keywords.PRE, Keywords.POST]
|
||||
|
||||
Reference in New Issue
Block a user