diff --git a/besser/BUML/notations/ocl/OCLWrapper.py b/besser/BUML/notations/ocl/OCLWrapper.py deleted file mode 100644 index 8cc82b35..00000000 --- a/besser/BUML/notations/ocl/OCLWrapper.py +++ /dev/null @@ -1,31 +0,0 @@ -from besser.BUML.notations.ocl.BOCLLexer import BOCLLexer -from besser.BUML.notations.ocl.BOCLParser import BOCLParser -from besser.BUML.notations.ocl.BOCLListener import BOCLListener -from besser.BUML.notations.ocl.RootHandler import Root_Handler -from antlr4 import * - -class OCLWrapper: - - def __init__(self,dm,om): - self.dm = dm - self.om = om - - # this method parse the OCL expression and create the Tree - # Arguments: - # OCL Object that contains the expressions and the class - def parse(self,ocl): - - try: - input_stream = InputStream(ocl.expression) - rootHandler = Root_Handler(ocl,self.dm,self.om) - lexer = BOCLLexer(input_stream) - stream = CommonTokenStream(lexer) - parser = BOCLParser(stream) - tree = parser.oclFile() - listener = BOCLListener(rootHandler) - walker = ParseTreeWalker() - walker.walk(listener,tree) - return True - except Exception as e: - print(e) - return False diff --git a/besser/BUML/notations/ocl/RootHandler.py b/besser/BUML/notations/ocl/RootHandler.py index 604dd3d0..7c44525f 100644 --- a/besser/BUML/notations/ocl/RootHandler.py +++ b/besser/BUML/notations/ocl/RootHandler.py @@ -14,6 +14,7 @@ def __init__(self,ocl=None,dm=None,om=None): self.pre = False self.post = False self.if_else_roots = [] + self.context_name="" def get_root(self): return self.root @@ -202,12 +203,14 @@ def verify(self,item): if 'or' in item[0:2]: item = item[2:] referredOP = 'OR' - prop = self.factory.create_property_Call_Expression(item, 'NI') + if 'allInstances' in item[0:12]: + return if referredOP is None: + prop = self.factory.create_property_Call_Expression(item, 'NI') # prop= self.factory.create_property_Call_Expression(item,'NI') self.add_to_root(prop) else: - opCallExp = self.factory.create_operation_call_expression(name="and") + opCallExp = self.factory.create_operation_call_expression(name=referredOP) opCallExp.referredOperation = self.factory.create_infix_operator(referredOP) self.add_to_root(opCallExp) pass @@ -253,7 +256,7 @@ def handle_binary_expression(self, expression, operator,inbetween= None,beforeSi elif "real" in leftside: leftPart = self.factory.create_real_literal_expression("NP", float(expressionParts[0])) elif "bool" in leftside: - leftPart = self.factory.create_boolean_literal_expression("NP", bool(expressionParts[0])) + leftPart = self.factory.create_boolean_literal_expression("NP", (expressionParts[0])) elif "str" in leftside: leftPart = self.factory.create_string_literal_expression("str", expressionParts[0].replace("'","")) @@ -264,7 +267,7 @@ def handle_binary_expression(self, expression, operator,inbetween= None,beforeSi elif "real" in rightside: rightPart = self.factory.create_real_literal_expression("NP", float(expressionParts[1])) elif "bool" in rightside: - rightPart = self.factory.create_boolean_literal_expression("NP", bool(expressionParts[1])) + rightPart = self.factory.create_boolean_literal_expression("NP", (expressionParts[1])) elif "str" in rightside: rightPart = self.factory.create_string_literal_expression("str", expressionParts[1].replace("'","")) diff --git a/docs/source/buml_language/model_types/ocl.rst b/docs/source/buml_language/model_types/ocl.rst index 96a25b18..49873a9c 100644 --- a/docs/source/buml_language/model_types/ocl.rst +++ b/docs/source/buml_language/model_types/ocl.rst @@ -22,6 +22,12 @@ We are able to parse all the queries from the metamodel. The work on OCL interpr context library inv inv1: self.books>0 +.. note:: + + BOCL Interpreter is available at https://github.com/BESSER-PEARL/BOCL-Interpreter. With this interpreter you can validate your OCL constraints defined on BUML models. + + + Supported notations ------------------- diff --git a/docs/source/examples/ocl.rst b/docs/source/examples/ocl.rst index 5b18dee8..328e94ac 100644 --- a/docs/source/examples/ocl.rst +++ b/docs/source/examples/ocl.rst @@ -16,5 +16,5 @@ We can set a rule that says *every book must have more than zero pages*. To do t context Book: self.pages > 0 .. note:: - - Please note that the work on the OCL interpreter is ongoing, and it will be added in the near future. \ No newline at end of file + + BOCL Interpreter is available at https://github.com/BESSER-PEARL/BOCL-Interpreter. With this interpreter you can validate your OCL constraints defined on BUML models.