def parse_string(self, strinput): lines = [] pstring = self.parser.parseString(strinput, parseAll=True) hts = HTS("STS") invar_props = [] ltl_props = [] modules = [] modulesdic = {} name = MAIN mainmodule = None for psts in pstring.stss: var_str = [] state_str = [] input_str = [] output_str = [] sub_str = [] par_str = [] init_str = [] trans_str = [] invar_str = [] if len(psts.moduledef) > 0: name = psts.moduledef[1] if len(psts.pardef) > 0: vardefs = psts.pardef for vardef in self._split_list(vardefs, T_CM): varname = vardef[0] vartype = vardef[2] try: vartype = parse_typestr(vartype) par_str.append((varname, vartype)) except UndefinedSymbolError: varpar = vardef[4:-1] par_str.append((varname, vartype, varpar)) dpsts = dict(psts) if P_VARDEFS in dpsts: if self.pyparsing_version == PYPARSING_220: vardefs = list(dict(psts.var)[P_VARDEFS]) else: vardefs = list(dpsts[P_VARDEFS]) for vardef in self._split_list(vardefs, T_SC): varname = vardef[0] if varname[0] == "'": varname = varname[1:-1] vartype = vardef[2] try: vartype = parse_typestr(vartype) var_str.append((varname, vartype)) except UndefinedSymbolError: varpar = vardef[4:-1] sub_str.append( (varname, vartype, self._split_list(varpar, T_CM))) if P_STATEDEFS in dpsts: if self.pyparsing_version == PYPARSING_220: statedefs = list(dict(psts.state)[P_STATEDEFS]) else: statedefs = list(dpsts[P_STATEDEFS]) for statedef in self._split_list(statedefs, T_SC): statename = statedef[0] if statename[0] == "'": statename = statename[1:-1] statetype = parse_typestr(statedef[2]) state_str.append((statename, statetype)) if P_INPUTDEFS in dpsts: if self.pyparsing_version == PYPARSING_220: inputdefs = list(dict(psts.input)[P_INPUTDEFS]) else: inputdefs = list(dpsts[P_INPUTDEFS]) for inputdef in self._split_list(inputdefs, T_SC): inputname = inputdef[0] if inputname[0] == "'": inputname = inputname[1:-1] inputtype = parse_typestr(inputdef[2]) input_str.append((inputname, inputtype)) if P_OUTPUTDEFS in dpsts: if self.pyparsing_version == PYPARSING_220: outputdefs = list(dict(psts.output)[P_OUTPUTDEFS]) else: outputdefs = list(dpsts[P_OUTPUTDEFS]) for outputdef in self._split_list(outputdefs, T_SC): outputname = outputdef[0] if outputname[0] == "'": outputname = outputname[1:-1] outputtype = parse_typestr(outputdef[2]) output_str.append((outputname, outputtype)) if P_INIT in dpsts: if self.pyparsing_version == PYPARSING_220: inits = list(dict(psts.init)[P_FORMULAE]) else: inits = list(dpsts[P_INIT])[1:] for i in range(0, len(inits), 2): init_str.append(inits[i]) if P_TRANS in dpsts: if self.pyparsing_version == PYPARSING_220: transs = list(dict(psts.trans)[P_FORMULAE]) else: transs = list(dpsts[P_TRANS])[1:] for i in range(0, len(transs), 2): trans_str.append(transs[i]) if P_INVAR in dpsts: if self.pyparsing_version == PYPARSING_220: invars = list(dict(psts.invar)[P_FORMULAE]) else: invars = list(dpsts[P_INVAR])[1:] for i in range(0, len(invars), 2): invar_str.append(invars[i]) module = STSModule(name, var_str, state_str, input_str, output_str, par_str, init_str, invar_str, trans_str, sub_str) modules.append(module) if name == MAIN: mainmodule = module else: modulesdic[name] = module hts = self.generate_HTS(mainmodule, modulesdic) hts.flatten() return (hts, invar_props, ltl_props)
def parse_string(self, strinput): lines = [] pstring = self.parser.parseString(strinput, parseAll=True) hts = HTS("STS") invar_props = [] ltl_props = [] modules = [] modulesdic = {} name = MAIN mainmodule = None for psts in pstring.stss: var_str = [] state_str = [] input_str = [] output_str = [] sub_str = [] par_str = [] init_str = [] trans_str = [] invar_str = [] if len(psts.moduledef) > 0: name = psts.moduledef[1] if len(psts.pardef) > 0: vardefs = psts.pardef for vardef in self._split_list(vardefs, T_CM): varname = vardef[0] vartype = vardef[2] varpar = vardef[4:-1] if vartype != T_BOOL else None par_str.append((varname, vartype, varpar)) if P_VARDEFS in dict(psts): vardefs = list(dict(psts.var)[P_VARDEFS]) for vardef in self._split_list(vardefs, T_SC): varname = vardef[0] if varname[0] == "'": varname = varname[1:-1] vartype = vardef[2] varpar = vardef[4:-1] if vartype != T_BOOL else None if vartype in (T_BV, T_BOOL): var_str.append((varname, vartype, varpar)) else: sub_str.append( (varname, vartype, self._split_list(varpar, T_CM))) if P_STATEDEFS in dict(psts): statedefs = list(dict(psts.state)[P_STATEDEFS]) for statedef in self._split_list(statedefs, T_SC): statename = statedef[0] if statename[0] == "'": statename = statename[1:-1] statetype = statedef[2] statepar = statedef[4:-1] if statetype != T_BOOL else None state_str.append((statename, statetype, statepar)) if P_INPUTDEFS in dict(psts): inputdefs = list(dict(psts.input)[P_INPUTDEFS]) for inputdef in self._split_list(inputdefs, T_SC): inputname = inputdef[0] if inputname[0] == "'": inputname = inputname[1:-1] inputtype = inputdef[2] inputpar = inputdef[4:-1] if inputtype != T_BOOL else None input_str.append((inputname, inputtype, inputpar)) if P_OUTPUTDEFS in dict(psts): outputdefs = list(dict(psts.output)[P_OUTPUTDEFS]) for outputdef in self._split_list(outputdefs, T_SC): outputname = outputdef[0] if outputname[0] == "'": outputname = outputname[1:-1] outputtype = outputdef[2] outputpar = outputdef[ 4:-1] if outputtype != T_BOOL else None output_str.append((outputname, outputtype, outputpar)) if P_INIT in dict(psts): inits = list(dict(psts.init)[P_FORMULAE]) for i in range(0, len(inits), 2): init_str.append(inits[i]) if P_TRANS in dict(psts): transs = list(dict(psts.trans)[P_FORMULAE]) for i in range(0, len(transs), 2): trans_str.append(transs[i]) if P_INVAR in dict(psts): invars = list(dict(psts.invar)[P_FORMULAE]) for i in range(0, len(invars), 2): invar_str.append(invars[i]) module = STSModule(name, var_str, state_str, input_str, output_str, par_str, init_str, invar_str, trans_str, sub_str) modules.append(module) if name == MAIN: mainmodule = module else: modulesdic[name] = module #hts.add_ts(self.generate_STS(var_str, init_str, invar_str, trans_str)) hts = self.generate_HTS(mainmodule, modulesdic) hts.flatten() return (hts, invar_props, ltl_props)