# from the RFCs ABNF description nilvalue = Word("-") digit = Regex("[0-9]{1}") nonzero_digit = Regex("[1-9]{1}") printusascii = printables sp = White(" ", exact=1) octet = Regex("[\x00-\xFF]") utf_8_string = Regex("[\x00-\xFF]*") BOM = "\xef\xbb\xbf" bom = Regex(BOM) msg_utf8 = bom + utf_8_string msg_any = utf_8_string msg = Combine(Or([msg_utf8, msg_any])).setResultsName("MSG") sd_name = CharsNotIn('= ]"', 1, 32) param_name = sd_name.setResultsName("SD_PARAM_NAME") param_value = QuotedString(quoteChar='"', escChar="\\", multiline=True) param_value = param_value.setResultsName("SD_PARAM_VALUE") sd_id = sd_name.setResultsName("SD_ID") sd_param = Group(param_name + Regex("=") + param_value) sd_params = Group(ZeroOrMore(Group(sp + sd_param.setResultsName("SD_PARAM")))) sd_element = Group("[" + sd_id + sd_params.setResultsName("SD_PARAMS") + "]") sd_element = sd_element.setResultsName("SD_ELEMENT") sd_elements = Group(OneOrMore(sd_element)) structured_data = Or([nilvalue, sd_elements.setResultsName("SD_ELEMENTS")]) structured_data = structured_data.setResultsName("STRUCTURED_DATA") time_hour = Regex("0[0-9]|1[0-9]|2[0-3]") time_minute = Regex("[0-5][0-9]") time_second = time_minute time_secfrac = Regex("\.[0-9]{1,6}") time_numoffset = Or([Regex("\+"), Regex("-")]) + time_hour + ":" + time_minute
def _create_parser(self): OBRACE, CBRACE, SEMI, OPAR, CPAR = list(map(Suppress, "{};()")) QUOTE = Suppress(Word("\"")) # keywords (IMPORT, COMMUNICATIONS, LANGUAGE, COMPONENT, CPP, CPP11, GUI, QWIDGET, QMAINWINDOW, QDIALOG, QT, PYTHON, REQUIRES, IMPLEMENTS, SUBSCRIBESTO, PUBLISHES, OPTIONS, TRUE, FALSE, INNERMODELVIEWER, STATEMACHINE, VISUAL) = list( map( CaselessKeyword, """ import communications language component cpp cpp11 gui QWidget QMainWindow QDialog Qt python requires implements subscribesTo publishes options true false InnerModelViewer statemachine visual""".split())) identifier = Word(alphas + "_", alphanums + "_") PATH = CharsNotIn("\";") # Imports idslImport = Group( Suppress(IMPORT) - QUOTE + PATH.setResultsName('idsl_path') - QUOTE + SEMI) idslImports = ZeroOrMore(idslImport).setResultsName("imports") commType = Optional(OPAR - (CaselessKeyword("ice") | CaselessKeyword("ros")).setResultsName("type") + CPAR) implementsList = Optional(IMPLEMENTS - Group( delimitedList( identifier.setResultsName("impIdentifier") + commType)).setResultsName("implements") + SEMI) requiresList = Optional(REQUIRES - Group( delimitedList( identifier.setResultsName("reqIdentifier") + commType)).setResultsName("requires") + SEMI) subscribesList = Optional(SUBSCRIBESTO - Group( delimitedList( identifier.setResultsName("subIdentifier") + commType)).setResultsName("subscribesTo") + SEMI) publishesList = Optional(PUBLISHES - Group( delimitedList( identifier.setResultsName("pubIdentifier") + commType)).setResultsName("publishes") + SEMI) communicationList = Group( implementsList & requiresList & subscribesList & publishesList).setResultsName("communications") communications = COMMUNICATIONS.suppress( ) - OBRACE + communicationList + CBRACE + SEMI # Language language_options = (CPP | CPP11 | PYTHON).setResultsName('language') language = LANGUAGE.suppress() - language_options - SEMI # InnerModelViewer innermodelviewer = Group( Optional(INNERMODELVIEWER.suppress() - (TRUE | FALSE) + SEMI))('innermodelviewer') # GUI gui_options = QWIDGET | QMAINWINDOW | QDIALOG gui = Group( Optional(GUI.suppress() - QT + OPAR - gui_options('gui_options') - CPAR + SEMI)) # additional options options = Group( Optional(OPTIONS.suppress() - identifier + ZeroOrMore(Suppress(Word(',')) + identifier) + SEMI)) statemachine = Group( Optional(STATEMACHINE.suppress() - QUOTE + CharsNotIn("\";").setResultsName('machine_path') + QUOTE + Optional( VISUAL.setResultsName('visual').setParseAction( lambda t: True)) + SEMI)) # Component definition componentContents = Group( communications - language + Optional(gui('gui')) + Optional(options('options')) + Optional(innermodelviewer) + Optional(statemachine('statemachine'))).setResultsName("content") component = Group(COMPONENT.suppress() - identifier("name") + OBRACE + componentContents + CBRACE + SEMI).setResultsName("component") CDSL = idslImports - component CDSL.ignore(cppStyleComment) return CDSL
# from the RFCs ABNF description nilvalue = Word("-") digit = Regex("[0-9]{1}") nonzero_digit = Regex("[1-9]{1}") printusascii = printables sp = White(" ", exact=1) octet = Regex('[\x00-\xFF]') utf_8_string = Regex('[\x00-\xFF]*') BOM = '\xef\xbb\xbf' bom = Regex(BOM) msg_utf8 = bom + utf_8_string msg_any = utf_8_string msg = Combine(Or([msg_utf8, msg_any])).setResultsName('MSG') sd_name = CharsNotIn('= ]"', 1, 32) param_name = sd_name.setResultsName('SD_PARAM_NAME') param_value = QuotedString(quoteChar='"', escChar='\\', multiline=True) param_value = param_value.setResultsName('SD_PARAM_VALUE') sd_id = sd_name.setResultsName('SD_ID') sd_param = Group(param_name + Regex('=') + param_value) sd_params = Group(ZeroOrMore(Group(sp + sd_param.setResultsName('SD_PARAM')))) sd_element = Group('[' + sd_id + sd_params.setResultsName('SD_PARAMS') + ']') sd_element = sd_element.setResultsName('SD_ELEMENT') sd_elements = Group(OneOrMore(sd_element)) structured_data = Or([nilvalue, sd_elements.setResultsName('SD_ELEMENTS')]) structured_data = structured_data.setResultsName('STRUCTURED_DATA') time_hour = Regex('0[0-9]|1[0-9]|2[0-3]') time_minute = Regex('[0-5][0-9]') time_second = time_minute time_secfrac = Regex('\.[0-9]{1,6}') time_numoffset = Or([Regex('\+'), Regex('-')]) + time_hour + ':' + time_minute
# from the RFCs ABNF description nilvalue = Word("-") digit = Regex("[0-9]{1}") nonzero_digit = Regex("[1-9]{1}") printusascii = printables sp = White(" ", exact=1) octet = Regex('[\x00-\xFF]') utf_8_string = Regex('[\x00-\xFF]*') BOM = '\xef\xbb\xbf' bom = Regex(BOM) msg_utf8 = bom + utf_8_string msg_any = utf_8_string msg = Combine(Or([msg_utf8, msg_any])).setResultsName('MSG') sd_name = CharsNotIn('= ]"', 1, 32) param_name = sd_name.setResultsName('SD_PARAM_NAME') param_value = QuotedString(quoteChar='"', escChar='\\', multiline=True) param_value = param_value.setResultsName('SD_PARAM_VALUE') sd_id = sd_name.setResultsName('SD_ID') sd_param = Group(param_name + Regex('=') + param_value) sd_params = Group(ZeroOrMore(Group(sp+sd_param.setResultsName('SD_PARAM')))) sd_element = Group('['+sd_id+sd_params.setResultsName('SD_PARAMS')+']') sd_element = sd_element.setResultsName('SD_ELEMENT') sd_elements = Group(OneOrMore(sd_element)) structured_data = Or([nilvalue, sd_elements.setResultsName('SD_ELEMENTS')]) structured_data = structured_data.setResultsName('STRUCTURED_DATA') time_hour = Regex('0[0-9]|1[0-9]|2[0-3]') time_minute = Regex('[0-5][0-9]') time_second = time_minute time_secfrac = Regex('\.[0-9]{1,6}') time_numoffset = Or([Regex('\+'), Regex('-')]) + \