예제 #1
0
# 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
예제 #2
0
    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
예제 #3
0
# 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
예제 #4
0
# 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('-')]) + \