def _instantiate(spec_text): section_by_name = parse_ltl(spec_text, logging.getLogger()) input_signals = [QuantifiedSignal('r', i) for i in range(nof_processes)] output_signals = [QuantifiedSignal('g', i) for i in range(nof_processes)] assumptions = section_by_name[PAR_ASSUMPTIONS] guarantees = section_by_name[PAR_GUARANTEES] inst_assumptions = list( chain( * [_instantiate_expr2(a, nof_processes, False) for a in assumptions])) inst_guarantees = list( chain( *[_instantiate_expr2(g, nof_processes, False) for g in guarantees])) assumptions_as_strings = [ ConverterToWringVisitor().dispatch(a) + ';\n' for a in inst_assumptions ] guarantees_as_strings = [ ConverterToWringVisitor().dispatch(g) + ';\n' for g in inst_guarantees ] return input_signals, output_signals, assumptions_as_strings, guarantees_as_strings
def _get_spec(ltl_text: str, logger: Logger) -> (list, list, list, list): #all the assumptions are conjugated together #the guarantees are separated into different SpecProperty objects data_by_section = par_parser.parse_ltl(ltl_text, logger) if data_by_section is None: return assumptions = data_by_section[PAR_ASSUMPTIONS] guarantees = data_by_section[PAR_GUARANTEES] anon_inputs = [s.name for s in data_by_section[PAR_INPUT_VARIABLES]] anon_outputs = [s.name for s in data_by_section[PAR_OUTPUT_VARIABLES]] return anon_inputs, anon_outputs, assumptions, guarantees
def _get_spec(ltl_text:str, logger:Logger) -> (list, list, list, list): #all the assumptions are conjugated together #the guarantees are separated into different SpecProperty objects data_by_section = par_parser.parse_ltl(ltl_text, logger) if data_by_section is None: return assumptions = data_by_section[PAR_ASSUMPTIONS] guarantees = data_by_section[PAR_GUARANTEES] anon_inputs = [s.name for s in data_by_section[PAR_INPUT_VARIABLES]] anon_outputs = [s.name for s in data_by_section[PAR_OUTPUT_VARIABLES]] return anon_inputs, anon_outputs, assumptions, guarantees
def __init__(self, filename=None, content=None): ''' Constructor ''' try: # read content if filename is not None: with open(filename, 'r') as fh: content = fh.read() assert(content is not None) spec_dict = par_parser.parse_ltl(content, None) # global system parameters system_parameters = {t[0]: t[1] for t in spec_dict[par_lexer_desc.PAR_GENERAL]} self.__system_parameters = system_parameters self.templates_count = int( system_parameters[par_lexer_desc.PAR_GENERAL_TEMPLATE_COUNT]) self.templates = [Template(i) for i in range(0, self.templates_count)] # signals for sig in spec_dict[par_lexer_desc.PAR_INPUT_VARIABLES]: assert(type(sig.template_index) is int) self.templates[sig.template_index].inputs.append(sig) for sig in spec_dict[par_lexer_desc.PAR_OUTPUT_VARIABLES]: self.templates[sig.template_index].outputs.append(sig) # assumptions self.assumptions = [Assumption(formula) for formula in spec_dict[par_lexer_desc.PAR_ASSUMPTIONS]] self.guarantees = [Guarantee(formula) for formula in spec_dict[par_lexer_desc.PAR_GUARANTEES]] # bound self.bound = (0,) * self.templates_count # cut-off self.cutoff = (0,) * self.templates_count except Exception as e: raise SpecificationException("Error while reading " "specification: %s" % e)
def _instantiate(spec_text): section_by_name = parse_ltl(spec_text, logging.getLogger()) input_signals = [QuantifiedSignal('r', i) for i in range(nof_processes)] output_signals = [QuantifiedSignal('g', i) for i in range(nof_processes)] assumptions = section_by_name[PAR_ASSUMPTIONS] guarantees = section_by_name[PAR_GUARANTEES] inst_assumptions = list(chain(*[_instantiate_expr2(a, nof_processes, False) for a in assumptions])) inst_guarantees = list(chain(*[_instantiate_expr2(g, nof_processes, False) for g in guarantees])) assumptions_as_strings = [ConverterToWringVisitor().dispatch(a) + ';\n' for a in inst_assumptions] guarantees_as_strings = [ConverterToWringVisitor().dispatch(g) + ';\n' for g in inst_guarantees] return input_signals, output_signals, assumptions_as_strings, guarantees_as_strings
import parsing.par_parser as parser SIMPLE_SPEC = """ [GENERAL] templates: 2 [INPUT_VARIABLES] #no support of global variables => all the variables are assumed to be indexed! r_0;r_1; [OUTPUT_VARIABLES] g_0;g_1; [ASSUMPTIONS] Forall (i) r_0_i=0; Forall (i) G(F((r_0_i=0)+(g_0_i=0))); Forall (i) r_1_i=0; Forall (i) G(F((r_1_i=0)+(g_1_i=0))); [GUARANTEES] Forall (i) g_0_i=0; Forall (i) g_1_i=0; Forall (i,j) G(!((g_0_i=1) * (g_0_j=1))); Forall (i,j) G(!((g_0_i=1) * (g_1_j=1))); Forall (i,j) G(!((g_1_i=1) * (g_1_j=1))); """ # par_parser.bparser.parse(input=SIMPLE_SPEC) parser.parse_ltl(SIMPLE_SPEC, logging.getLogger())