示例#1
0
def build_parser():
    """
    Build a pyparsing parser for our custom topology description language.

    :rtype: pyparsing.MatchFirst
    :return: A pyparsing parser.
    """
    from pyparsing import (Word, Literal, QuotedString, StringStart, StringEnd,
                           alphas, nums, alphanums, Group, OneOrMore, Optional)

    number = Word(nums)
    text = QuotedString('"')
    identifier = Word(alphas, alphanums + '_')

    attribute = (identifier('key') + Literal('=') +
                 (text | number | identifier)('value'))
    attributes = (Literal('[') + OneOrMore(Group(attribute))('attributes') +
                  Literal(']'))

    node = identifier('node')
    port = node + Literal(':') + (identifier | number)('port')
    link = port('endpoint_a') + Literal('--') + port('endpoint_b')

    nodes_spec = (StringStart() + Optional(attributes) +
                  OneOrMore(Group(node))('nodes') + StringEnd())
    ports_spec = (StringStart() + Optional(attributes) +
                  OneOrMore(Group(port))('ports') + StringEnd())
    link_spec = (StringStart() + Optional(attributes) + link('link') +
                 StringEnd())

    statement = link_spec | ports_spec | nodes_spec

    return statement
示例#2
0
def term():
    """ """
    token = (
        StringStart() + operand() + StringEnd()
        ^ StringStart() + Group(operand() + operator() + operand()) + StringEnd()
    )
    token.setName("term")
    return token
示例#3
0
    def _compile_grammar(self):
        # type: () -> ParserElement
        """
        Takes the individual grammars from each registered directive and compiles them into a full test fixture grammar
        whose callback methods are the bound methods on this class instance.

        :return: The full PyParsing grammar for test fixture files.
        """
        grammars = [
            (LineEnd().suppress()).setParseAction(
                functools.partial(self._finalize_test_case)
            )
        ]

        # directives
        for directive_class in get_all_directives():
            grammars.append(
                LineStart() +
                directive_class.get_full_grammar().setParseAction(
                    functools.partial(self._ingest_directive, directive_class)
                ) +
                LineEnd()
            )

        return StringStart() + OneOrMore(MatchFirst(grammars)) + StringEnd()
示例#4
0
 def expr(self) -> ParserElement:
     return (StringStart() | PrecededBy(
         Regex(r"\W", flags=re.UNICODE), retreat=1)) + Combine(
             "!" + Word(printables + " ", min=3,
                        excludeChars="|!").setResultsName("url") +
             Optional("|") + SkipTo("!", failOn="\n") +
             "!", ).setParseAction(self.action)
示例#5
0
文件: abnf.py 项目: Slach/python-ircd
def wildcard(str):
    parsed = parse(str, mask)
    if not parsed:
        return parsed
    return StringStart() + \
           Regex(''.join([wild_to_match(x) for x in parsed])) + \
           StringEnd()
示例#6
0
def dom_document_setup():
    crn_DWC = "".join(
        [x for x in ParseElementEnhance.DEFAULT_WHITE_CHARS if x != "\n"])
    ParseElementEnhance.setDefaultWhitespaceChars(crn_DWC)

    W = Word
    G = Group
    S = Suppress
    O = Optional
    L = Literal

    identifier = W(alphas, alphanums + "_")
    number = W(nums, nums)
    domain = G(OneOrMore((G(identifier + O("*")) | "?" | "+")))
    dotparen = G(OneOrMore(W("().+", max=1)))
    structure = domain + OneOrMore(LineEnd().suppress()) + dotparen
    sequence = G(
        S("sequence") + identifier + S(":") + number +
        OneOrMore(LineEnd().suppress()))
    molecule = G(identifier + S(":") + OneOrMore(LineEnd().suppress()) +
                 structure)

    document = StringStart() + ZeroOrMore(LineEnd().suppress()) + G(
        ZeroOrMore(sequence)) + G(
            OneOrMore(molecule +
                      OneOrMore(LineEnd().suppress()))) + StringEnd()
    document.ignore(pythonStyleComment)
    return document
示例#7
0
def create_arg_parser():
    from pyparsing import Literal, Word, delimitedList, Group, \
         StringStart, StringEnd, Optional, nums, alphas, alphanums

    ident = Word(alphas, alphanums + "_")
    inumber = Word("+-" + nums, nums)

    history = Optional(Literal('[').suppress() + inumber +
                       Literal(']').suppress(),
                       default=0)("history")
    history.setParseAction(lambda str, loc, toks: int(toks[0]))

    variable = Group(Word(alphas, alphanums + '._') + history)

    derivative = Group(Literal('d') + variable\
                       + Literal('/').suppress() + Literal('dt'))

    trace = Group(
        Literal('tr') + Literal('(').suppress() +
        Optional(ident + Literal(',').suppress(), default=None) + variable +
        Literal(')').suppress())

    generalized_var = derivative | trace | variable

    args = StringStart() + delimitedList(generalized_var) + StringEnd()

    return args
示例#8
0
def _define_vs():
    KEY = Word(alphas + '_$', alphanums +
               '_$').setName('identifier').setResultsName('key')  # noqa
    VALUE = originalTextFor(_define_json()).setResultsName('value')
    # validator name, eg: int
    NAME = Optional(
        Optional(Suppress('?')) +
        pyparsing_common.identifier.setResultsName('name'))  # noqa
    # refers, eg: @xx@yy
    REFERS = Group(ZeroOrMore(Suppress('@') +
                              pyparsing_common.identifier)).setResultsName(
                                  'refers')  # noqa
    # args, eg: (), (1), (1,2,3), ([1,2], {"key":"value"}, "Any JSON")
    ARGS = Group(
        Optional(
            Suppress('(') + Optional(delimitedList(VALUE)) +
            Suppress(')'))).setResultsName('args')  # noqa
    # key-value, eg: key, key=True, key=[1,2,3]
    KW = Group(KEY + Optional(Suppress('=') + VALUE))
    # kwargs, eg: &key1&key2=True&key3=[1,2,3]
    KWARGS = Group(ZeroOrMore(Suppress('&') + KW)).setResultsName('kwargs')
    # lead xxx is key: xxx@yyy, xxx?yyy, $self&abc
    # lead xxx except '$self' is validator name: xxx(1,2), xxx&abc, xxx
    SELF = Literal('$self').setResultsName('key')
    VS_KEY = Optional((KEY + FollowedBy(Word('@?'))) | SELF)
    VS_DEF = REFERS + NAME + ARGS + KWARGS
    return StringStart() + VS_KEY + VS_DEF + StringEnd()
示例#9
0
def create_bnf(term_descs):
    """term_descs .. list of TermParse objects
    (sign, term_name, term_arg_names), where sign can be real or complex
    multiplier"""

    lc = ['+']  # Linear combination context.
    equal = Literal("=").setParseAction(rhs(lc))
    zero = Literal("0").suppress()

    point = Literal(".")
    e = CaselessLiteral("E")
    inumber = Word("+-" + nums, nums)
    fnumber = Combine(Word("+-" + nums, nums) +
                      Optional(point + Optional(Word(nums))) +
                      Optional(e + Word("+-" + nums, nums)))
    number = fnumber + Optional(Literal('j'), default='')
    add_op = oneOf('+ -')
    number_expr = Forward()
    number_expr << ZeroOrMore('(') + number \
                + ZeroOrMore(add_op + number_expr) \
                + ZeroOrMore(')')

    ident = Word(alphas, alphanums + "_")

    integral = Combine((Literal('i') + Word(alphanums)) | Literal('i')
                       | Literal('a') | Word(nums))("integral")

    history = Optional('[' + inumber + ']', default='')("history")

    variable = Combine(Word(alphas, alphanums + '._') + history)

    derivative = Combine(Literal('d') + variable \
                         + Literal('/') + Literal('dt'))

    trace = Combine(Literal('tr') + '(' + variable + ')')

    generalized_var = derivative | trace | variable
    args = Group(delimitedList(generalized_var))

    flag = Literal('a')

    term = Optional(Literal('+') | Literal('-'), default='+')("sign") \
                    + Optional(number_expr + Literal('*').suppress(),
                               default=['1.0', ''])("mul") \
                    + Combine(ident("name") \
                              + Optional("." + (integral + "."
                              + ident("region") + "." + flag("flag") |
                              integral + "." + ident("region") |
                              ident("region")
                              )))("term_desc") + "(" \
                    + Optional(args, default=[''])("args") + ")"
    term.setParseAction(collect_term(term_descs, lc))

    rhs1 = equal + OneOrMore(term)
    rhs2 = equal + zero
    equation = StringStart() + OneOrMore(term) \
               + Optional(rhs1 | rhs2) + StringEnd()
    ## term.setDebug()
    return equation
示例#10
0
    def _parse_cut_ami(text):
        """Parse "cut ami" command using pyparsing"""

        # Word == single token
        edctoken = Word(alphanums + '_')
        withtoken = Word(printables.replace('=', ''))

        preamble = Suppress(Literal('cut') + 'ami')

        # e.g. prod-edx-exdapp. Combining into 1 token enforces lack of whitespace
        e_d_c = Combine(
            edctoken('environment') + '-' + edctoken('deployment') + '-' +
            edctoken('cluster'))

        # e.g. cut ami for prod-edx-edxapp. Subsequent string literals are converted when added to a pyparsing object.
        for_from = Suppress('for') + e_d_c('for_edc') + Suppress(
            'from') + e_d_c('from_edc')

        # e.g. with foo=bar bing=baz.
        # Group puts the k=v pairs in sublists instead of flattening them to the top-level token list.
        with_stmt = Suppress('with')
        with_stmt += OneOrMore(
            Group(withtoken('key') + Suppress('=') +
                  withtoken('value')))('overrides')

        # e.g. using ami-deadbeef
        using_stmt = Suppress('using') + Regex('ami-[0-9a-f]{8}')('ami_id')

        # 0-1 with and using clauses in any order (see Each())
        modifiers = Optional(with_stmt('with_stmt')) & Optional(
            using_stmt('using_stmt'))

        # 0-1 verbose and noop options in any order (as above)
        options = Optional(Literal('verbose')('verbose')) & Optional(
            Literal('noop')('noop'))

        pattern = StringStart(
        ) + preamble + options + for_from + modifiers + StringEnd()

        parsed = pattern.parseString(text)
        return {
            'dest_env': parsed.for_edc.environment,
            'dest_dep': parsed.for_edc.deployment,
            'dest_play': parsed.for_edc.cluster,
            'source_env': parsed.from_edc.environment,
            'source_dep': parsed.from_edc.deployment,
            'source_play': parsed.from_edc.cluster,
            'base_ami':
            parsed.using_stmt.ami_id if parsed.using_stmt else None,
            'version_overrides':
            {i.key: i.value
             for i in parsed.with_stmt.overrides}
            if parsed.with_stmt else None,
            'verbose': bool(parsed.verbose),
            'noop': bool(parsed.noop),
        }
示例#11
0
def _define_element():
    VALIDATOR = pyparsing_common.identifier.setName('validator').setResultsName('validator')
    ITEMS = _define_value().setName('items').setResultsName('items')
    ITEMS_WRAPPER = Optional(Suppress('(') + ITEMS + Suppress(')'))
    PARAMS_KEY = pyparsing_common.identifier.setName('key').setResultsName('key')
    PARAMS_VALUE = _define_value().setName('value').setResultsName('value')
    PARAMS_VALUE_WRAPPER = Optional(Suppress('(') + PARAMS_VALUE + Suppress(')'))
    PARAMS_KEY_VALUE = Group(Suppress('.') + PARAMS_KEY + PARAMS_VALUE_WRAPPER)
    PARAMS = Group(ZeroOrMore(PARAMS_KEY_VALUE)).setName('params').setResultsName('params')
    return StringStart() + VALIDATOR + ITEMS_WRAPPER + PARAMS + StringEnd()
示例#12
0
    def expr(self) -> ParserElement:
        NON_ALPHANUMS = Regex(r"\W", flags=re.UNICODE)
        TOKEN = Suppress(self.TOKEN)
        IGNORE = White() + TOKEN | self.get_ignore_expr()
        ELEMENT = Combine(
            TOKEN + (~White() & ~Char(self.TOKEN)) +
            SkipTo(TOKEN, ignore=IGNORE, failOn="\n") + TOKEN +
            FollowedBy(NON_ALPHANUMS | StringEnd()), )

        return (StringStart()
                | PrecededBy(NON_ALPHANUMS, retreat=1)) + Combine(
                    ELEMENT.setParseAction(self.action) +
                    Optional(~ELEMENT, default=" "), )
示例#13
0
 def expr(self) -> ParserElement:
     MENTION = Combine(
         "[" + Optional(
             SkipTo("|", failOn="]") + Suppress("|"),
             default="",
         ) + "~" + Optional(CaselessLiteral("accountid:")) +
         Word(alphanums + ":-").setResultsName("accountid") + "]", )
     return ((StringStart()
              | Optional(PrecededBy(White(), retreat=1), default=" ")) +
             MENTION.setParseAction(self.action) +
             (StringEnd() | Optional(FollowedBy(
                 White() | Char(punctuation, excludeChars="[") | MENTION),
                                     default=" ")))
示例#14
0
def _make_key_parser():
    from pyparsing import (Optional, Literal, Word, Group, Keyword,
                           StringStart, StringEnd, Or)
    digits = '0123456789'
    modifier_keywords = Word(''.join(aenea.config.MODIFIERS))
    key_symbols = Or([Keyword(symbol) for symbol in aenea.config.KEYS])
    pause_clause = Optional(Literal('/') + Word('.' + digits))
    modifier_clause = Optional(modifier_keywords + Literal('-'))
    key_hold_clause = Literal(':') + Or([Keyword(d) for d in ('up', 'down')])
    keypress_clause = Group(
        Group(pause_clause) + Group(Optional(Literal(':') + Word(digits))))

    return (StringStart() + Group(modifier_clause) + Group(key_symbols) +
            Group(key_hold_clause | keypress_clause) + Group(pause_clause) +
            StringEnd())
示例#15
0
def process_task_lists(content: str) -> str:
    item = Group(CharsNotIn('\n') + (StringEnd() | '\n')).leaveWhitespace()
    checkbox = oneOf(['[ ]', '[x]'])
    marker = Suppress(oneOf(['+', '-', '*']) | Word(nums) + '.')
    #
    indent = oneOf(['    ', '\t']).leaveWhitespace()
    indents = Group(ZeroOrMore(indent))
    #
    list_item = Group(indents + marker + checkbox + item)
    #
    before = Suppress(StringStart() | Literal('\n\n')).leaveWhitespace()
    list_ = before + OneOrMore(list_item)
    #
    list_.setParseAction(replace_list)
    return list_.transformString(content)
示例#16
0
def make_parser(payload_specification):
    """
    The parser has to be payload_specification specific because it needs to know
    the types of the records to build a FieldSelection.
    """
    def make_selection(string, location, tokens):
        variable, comparator, value = tokens
        if payload_specification and variable not in payload_specification:
            raise RuntimeError("%s is not a value in the folder payload "
                               "specification")
        elif not payload_specification:
            return (variable, comparator, value)
        typeid = payload_specification[variable].storageType().id()
        return make_fieldselection(variable, typeid, comparator, value)

    from PyCool import cool
    EQ = Literal("==").setParseAction(lambda t: cool.FieldSelection.EQ)
    NE = Literal("!=").setParseAction(lambda t: cool.FieldSelection.NE)
    GE = Literal(">=").setParseAction(lambda t: cool.FieldSelection.GE)
    LE = Literal("<=").setParseAction(lambda t: cool.FieldSelection.LE)
    GT = Literal(">").setParseAction(lambda t: cool.FieldSelection.GT)
    LT = Literal("<").setParseAction(lambda t: cool.FieldSelection.LT)
    comparator = EQ | NE | GE | LE | GT | LT
    operand = (variable + comparator + value).setParseAction(make_selection)

    orop = Literal("or").suppress()
    andop = Literal("and").suppress()

    def logic_builder(connective):
        def thunk(string, location, tokens):
            vec = make_selection_vector()
            for token in tokens[0]:
                vec.push_back(token)

            return cool.CompositeSelection(connective, vec)

        return thunk

    expr = StringStart() + operatorPrecedence(operand, [
        (andop, 2, opAssoc.LEFT, logic_builder(cool.CompositeSelection.AND)),
        (orop, 2, opAssoc.LEFT, logic_builder(cool.CompositeSelection.OR)),
    ]) + StringEnd()

    def go(selection):
        return expr.parseString(selection)[0]

    return go
示例#17
0
    def expr(self) -> ParserElement:
        NL = LineEnd().suppress()
        SEP = (Literal("||") | Literal("|")).suppress()
        ROW_BREAK = NL + SEP | NL + NL | StringEnd()
        IGNORE = (Link(**self.init_kwargs).expr
                  | MailTo(**self.init_kwargs).expr
                  | Image(**self.init_kwargs).expr
                  | Mention(**self.init_kwargs).expr)

        ROW = SEP + ZeroOrMore(
            SkipTo(SEP | ROW_BREAK, ignore=IGNORE) + Optional(SEP),
            stopOn=ROW_BREAK | NL + ~SEP,
        )

        EMPTY_LINE = Combine("\n" + White(" \t", min=0) + "\n")
        return (((StringStart() + Optional("\n"))
                 ^ Optional(EMPTY_LINE, default="\n")) +
                OneOrMore(LineStart() + Group(ROW) + NL).setParseAction(
                    self.action) +
                (StringEnd() | Optional(LineEnd(), default="\n")))
示例#18
0
文件: config.py 项目: vchimishuk/rudd
def parse(s):
    path = Word(printables) ^ QuotedString('"')
    option_name = Literal("exec") ^ Literal("include") ^ Literal("exclude")
    option_value = path
    option = Group(option_name + option_value)
    options_list = Group(ZeroOrMore(option))
    path_entry = Group(path + Literal("{") + \
                       options_list + \
                       Literal("}"))
    path_entries_list = ZeroOrMore(path_entry)
    config = StringStart() + path_entries_list + StringEnd()

    entries = []
    for e in config.parseString(remove_comments(s)):
        opts = []
        if len(e) == 4:
            for o in e[2]:
               opts.append(Option(o[0], sanitize(o[1])))
        entries.append(Entry(sanitize(e[0]), opts))

    return entries
示例#19
0
 def _define_grammar(self):
     g = {}
     label = Literal('Contents') | Literal('Caption title') | \
             Literal('Sub-caption') | Literal('Half-title') | \
             Literal('Footline') | Literal('Comments') | \
             Literal('Modificatons') | Literal('Errors') | \
             Literal('DMF') | Literal('ADF')
     copies_label = LineStart() + Literal('Copies')
     all_chars = u''.join(
         unichr(c) for c in xrange(65536)
         if unicodedata.category(unichr(c)).startswith('L'))
     section_separator = LineEnd() + FollowedBy(label | copies_label
                                                | StringEnd())
     section = SkipTo(section_separator)
     library = Combine(Word(all_chars) + Literal(u'-') + Word(all_chars))
     copy_separator = LineEnd() + FollowedBy(library) | \
                      LineEnd() + StringEnd() | StringEnd()
     copy = library + SkipTo(copy_separator) + Suppress(copy_separator)
     g['comments'] = Suppress('Comments') + SkipTo(section_separator)
     g['code'] = StringStart() + SkipTo(LineEnd()) + Suppress(LineEnd())
     g['title'] = Suppress(g['code']) + Suppress(LineEnd()) + section
     g['copies'] = Suppress(copies_label) + OneOrMore(Group(copy))
     return g
示例#20
0
operators = OPERATORS_MAP.get_precedence_list(__build_unary_operator,
                                              __build_binary_operator)

# Function call
arguments_list_call = (pOptional(delimitedList(expression)).setName(
    "arguments_list_call").setParseAction(lambda r: ArgListCall(list(r))))
arguments_list_def = (pOptional(delimitedList(identifier)).setName(
    "arguments_list_def").setParseAction(lambda r: ArgListDef(list(r))))
orphan_function_call_paren << (
    identifier + lparen + arguments_list_call + rparen
).setName("orphan_function_call_paren").setParseAction(lambda r: FunCall(*r))
function_call_paren = ((member_access + lparen + arguments_list_call +
                        rparen).setName("function_call_paren").setParseAction(
                            lambda r: FunCall(r[0], r[1])))
function_call_no_paren = ((StringStart() + member_access +
                           arguments_list_call +
                           StringEnd()).setName("function_call_no_paren").
                          setParseAction(lambda r: FunCall(r[0], r[1])))

terminal = literal | function_call_paren | member_access
expression << infixNotation(terminal, operators, lpar=lparen,
                            rpar=rparen).setName("expression")
expression_statement = (function_call_no_paren
                        | expression).setName("expression_statement")

##################
#  Declarations  #
##################

# Variable
示例#21
0
filterlist = OneOrMore(filter_)
or_ = Suppress(Literal('|')) + filterlist
or_.setParseAction(lambda s, l, t: pureldap.LDAPFilter_or(t))
or_.setName('or')
and_ = Suppress(Literal('&')) + filterlist
and_.setParseAction(lambda s, l, t: pureldap.LDAPFilter_and(t))
and_.setName('and')
filtercomp = and_ | or_ | not_ | item
filtercomp.setName('filtercomp')
filter_ << (Suppress(Literal('(').leaveWhitespace()) + filtercomp +
            Suppress(Literal(')').leaveWhitespace()))
filter_.setName('filter')
filtercomp.leaveWhitespace()
filter_.leaveWhitespace()

toplevel = (StringStart().leaveWhitespace() + filter_ +
            StringEnd().leaveWhitespace())
toplevel.leaveWhitespace()
toplevel.setName('toplevel')


def parseFilter(s):
    """
    Converting source string to pureldap.LDAPFilter

    Source string is converted to unicode for Python 3
    as pyparsing cannot parse Python 3 byte strings with
    the rules declared in this module.
    """
    s = to_unicode(s) if not six.PY2 else s
    try:
示例#22
0
# An integer value
integer = Word(nums)
integer.setParseAction(Integer.parse)
integer.setName("integer")

dice_separators = RandomElement.DICE_MAP.keys()
dice_element = Or(
    wrap_string(CaselessLiteral, x, suppress=False) for x in dice_separators
)
special = wrap_string(Literal, "%", suppress=False) | wrap_string(
    CaselessLiteral, "f", suppress=False
)

# An expression in dice notation
expression = (
    StringStart()
    + operatorPrecedence(
        integer,
        [
            (dice_element, 2, opAssoc.LEFT, RandomElement.parse, special),
            (dice_element, 1, opAssoc.RIGHT, RandomElement.parse_unary, special),
            (wrap_string(CaselessLiteral, "x"), 2, opAssoc.LEFT, Explode.parse),
            (wrap_string(CaselessLiteral, "x"), 1, opAssoc.LEFT, Explode.parse),
            (wrap_string(CaselessLiteral, "rr"), 2, opAssoc.LEFT, ForceReroll.parse),
            (wrap_string(CaselessLiteral, "rr"), 1, opAssoc.LEFT, ForceReroll.parse),
            (wrap_string(CaselessLiteral, "r"), 2, opAssoc.LEFT, Reroll.parse),
            (wrap_string(CaselessLiteral, "r"), 1, opAssoc.LEFT, Reroll.parse),
            (wrap_string(Word, "^hH", exact=1), 2, opAssoc.LEFT, Highest.parse),
            (wrap_string(Word, "^hH", exact=1), 1, opAssoc.LEFT, Highest.parse),
            (wrap_string(Word, "vlL", exact=1), 2, opAssoc.LEFT, Lowest.parse),
            (wrap_string(Word, "vlL", exact=1), 1, opAssoc.LEFT, Lowest.parse),
示例#23
0
 def expr(self) -> ParserElement:
     return ("\n" | StringStart()) + Literal("bq. ").setParseAction(
         replaceWith("> "))
示例#24
0
    def __init__(self):
        filename = os.path.join(paths.lib_dir(), 'bauble.glade')
        self.widgets = utils.load_widgets(filename)
        self.window = self.widgets.main_window
        self.window.hide()

        # restore the window size
        geometry = prefs[self.window_geometry_pref]
        if geometry is not None:
            self.window.set_default_size(*geometry)

        self.window.connect('delete-event', self.on_delete_event)
        self.window.connect("destroy", self.on_quit)
        self.window.set_title(self.title)

        try:
            pixbuf = gtk.gdk.pixbuf_new_from_file(bauble.default_icon)
            self.window.set_icon(pixbuf)
        except Exception:
            logger.warning(
                _('Could not load icon from %s') % bauble.default_icon)
            logger.warning(traceback.format_exc())

        menubar = self.create_main_menu()
        self.widgets.menu_box.pack_start(menubar)

        combo = self.widgets.main_comboentry
        model = gtk.ListStore(str)
        combo.set_model(model)
        self.populate_main_entry()

        main_entry = combo.child
        main_entry.connect('activate', self.on_main_entry_activate)
        accel_group = gtk.AccelGroup()
        main_entry.add_accelerator("grab-focus", accel_group, ord('L'),
                                   gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
        self.window.add_accel_group(accel_group)

        go_button = self.widgets.go_button
        go_button.connect('clicked', self.on_go_button_clicked)

        query_button = self.widgets.query_button
        query_button.connect('clicked', self.on_query_button_clicked)

        self.set_default_view()

        # add a progressbar to the status bar
        # Warning: this relies on gtk.Statusbar internals and could break in
        # future versions of gtk
        statusbar = self.widgets.statusbar
        statusbar.set_spacing(10)
        statusbar.set_has_resize_grip(True)
        self._cids = []

        def on_statusbar_push(sb, cid, txt):
            if cid not in self._cids:
                self._cids.append(cid)

        statusbar.connect('text-pushed', on_statusbar_push)

        # remove label from frame
        frame = statusbar.get_children()[0]
        #frame.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FF0000'))
        label = frame.get_children()[0]
        frame.remove(label)

        # replace label with hbox and put label and progress bar in hbox
        hbox = gtk.HBox(False, 5)
        frame.add(hbox)
        hbox.pack_start(label, True, True, 0)
        vbox = gtk.VBox(True, 0)
        hbox.pack_end(vbox, False, True, 15)
        self.progressbar = gtk.ProgressBar()
        vbox.pack_start(self.progressbar, False, False, 0)
        self.progressbar.set_size_request(-1, 10)
        vbox.show()
        hbox.show()

        from pyparsing import StringStart, Word, alphanums, restOfLine, \
            StringEnd
        cmd = StringStart() + ':' + Word(alphanums +
                                         '-_').setResultsName('cmd')
        arg = restOfLine.setResultsName('arg')
        self.cmd_parser = (cmd + StringEnd()) | (cmd + '=' + arg) | arg

        combo.grab_focus()
示例#25
0
from pyparsing import quotedString
from pyparsing import Regex
from pyparsing import SkipTo
from pyparsing import StringEnd
from pyparsing import StringStart
from pyparsing import Word
from pyparsing import ZeroOrMore

from undebt.pattern import WHITESPACE_CHARS
from undebt.pattern import WHITESPACE_OR_NL_CHARS
from undebt.pattern.util import condense
from undebt.pattern.util import fixto

ANY_CHAR = Regex(r".", re.DOTALL)

START_OF_FILE = StringStart().suppress()
END_OF_FILE = StringEnd().suppress()

NL = Literal("\n")
DOT = Literal(".")
LPAREN = Literal("(")
RPAREN = Literal(")")
COMMA = Literal(",")
COLON = Literal(":")

LINE_START = NL | fixto(START_OF_FILE, "")
NO_BS_NL = Regex(r"(?<!\\)").suppress() + NL

SKIP_TO_TEXT = SkipTo(CharsNotIn(WHITESPACE_OR_NL_CHARS))
SKIP_TO_TEXT_OR_NL = SkipTo(CharsNotIn(WHITESPACE_CHARS))
INDENT = originalTextFor(LINE_START + SKIP_TO_TEXT_OR_NL)
示例#26
0
文件: parsers.py 项目: aipub/booleano
 def build_parser(self):
     self._parser = (StringStart() + self.define_operation() + StringEnd())
示例#27
0
    Optional(~SYN_KEYWORDS + Word(TOKEN)(PROP_VALUE)))

BLOCKS = (NAMED_BLOCK | ANON_BLOCK | EMPTY_BLOCK)

SECTION << Group(
    Suppress(SYN_OPEN_BRACKET) + Word(TOKEN)(TYPE_SECTION) +
    Suppress(SYN_CLOSE_BRACKET) + Suppress(LineEnd()) +
    Group(Optional(OneOrMore(~SECTION + STATEMENT)))(PROP_BODY))

STATEMENT << (SECTION | COMMENT | RANDOM | BLOCKS | ANON_BLOCK | CONDITIONAL
              | ONELINERS)

# ENDIF is to catch unmatched `endif` statements.
ROOT << (STATEMENT | Group(SYN_CLOSERS))

GRAMMAR = StringStart() + ZeroOrMore(ROOT)(PROP_BODY) + StringEnd()


# pylint: disable=too-many-branches
def structure_impl(result):
    """Recursive structure implementation."""
    body = []
    for statement in result[PROP_BODY]:
        if TYPE_IF in statement:
            body.append({
                PROP_TYPE: TYPE_IF,
                PROP_VALUE: statement[TYPE_IF][PROP_VALUE],
                PROP_BODY: structure_impl(statement.get(TYPE_IF))
            })
        if TYPE_ELSEIF in statement:
            for elseif in statement[TYPE_ELSEIF]:
示例#28
0
def crn_document_setup(modular = False):
  """Parse a formal chemical reaction network. 

  Args: 
    modular <optional:bool>: Adds an additional nesting for modules within a
      CRN. Use one line per module (';' separates reactions).

  Format:
    # A list of reactions, optionally with reaction rates:
    # <- this is a comment!
    B + B -> C    # [k = 1]
    C + A <=> D   # [kf = 1, kr = 1]
    <=> A  [kf = 15, kr = 6]

    # Note that you can write multiple reactions in one line:
    A + 2C -> E [k = 13.78]; E + F <=> 2A  [kf = 13, kr = 14]

  Returns:

  """
  # NOTE: If you want to add support for multiple modules per line, you can use
  # the '|' character.
  
  W = Word
  G = Group
  S = Suppress
  O = Optional
  C = Combine
  L = Literal
  
  def T(x, tag):
    """ Return a *Tag* to distinguish (ir)reversible reactions """
    def TPA(tag):
      return lambda s, l, t: t.asList() + [tag]
    return x.setParseAction(TPA(tag))
  
  crn_DWC = "".join(
      [x for x in ParseElementEnhance.DEFAULT_WHITE_CHARS if x != "\n"])
  ParseElementEnhance.setDefaultWhitespaceChars(crn_DWC)
  
  identifier = W(alphas, alphanums+"_")

  multiplier = W(nums)
  species = G(O(multiplier) + identifier)

  rate = C(W(nums) + O((L('.') + W(nums)) | (L('e') + O('-') + W(nums))))

  k = G(S('[') + S('k') + S('=') + rate + S(']'))
  rev_k = G(S('[') + S('kf') + S('=') + rate + S(',') + \
                     S('kr') + S('=') + rate + S(']'))

  reaction = T(G(O(delimitedList(species, "+"))) + \
             S("->") + \
             G(O(delimitedList(species, "+"))) + O(k), 'irreversible')

  rev_reaction = T(G(O(delimitedList(species, "+"))) + \
                 S("<=>") + \
                 G(O(delimitedList(species, "+"))) + O(rev_k), 'reversible')
  

  expr = G(reaction | rev_reaction) 

  if modular :
    module = G(expr + ZeroOrMore(S(";") + expr))
  else :
    module = expr + ZeroOrMore(S(";") + expr)

  formal = G(O(S(";")) + L("formals") + S(L("=") + \
             L("{")) + O(delimitedList(identifier)) + S("}"))

  signal = G(O(S(";")) + L("signals") + S(L("=") + \
             L("{")) + O(delimitedList(identifier)) + S("}"))

  fuel = G(O(S(";")) + L("fuels") + S(L("=") + \
               L("{")) + O(delimitedList(identifier)) + S("}"))

  addon = formal | signal | fuel

  crn = OneOrMore(module + ZeroOrMore(S(LineEnd()))) + ZeroOrMore(addon + ZeroOrMore(S(LineEnd())))

  document = StringStart() + ZeroOrMore(S(LineEnd())) + crn + StringEnd()
  document.ignore(pythonStyleComment)
  return document
示例#29
0
            operator_expression.setParseAction(action)

        this <<= (operator_expression | last)
        last = this

    # Set the full expression and return it
    expression <<= last
    return expression

# An integer value
integer = Word(nums)
integer.setParseAction(Integer.parse)
integer.setName("integer")

# An expression in dice notation
expression = StringStart() + operatorPrecedence(integer, [
    (CaselessLiteral('d').suppress(), 2, opAssoc.LEFT, Dice.parse_binary),
    (CaselessLiteral('d').suppress(), 1, opAssoc.RIGHT, Dice.parse_unary),

    (Literal('/').suppress(), 2, opAssoc.LEFT, Div.parse),
    (Literal('*').suppress(), 2, opAssoc.LEFT, Mul.parse),
    (Literal('-').suppress(), 2, opAssoc.LEFT, Sub.parse),
    (Literal('+').suppress(), 2, opAssoc.LEFT, Add.parse),

    (CaselessLiteral('t').suppress(), 1, opAssoc.LEFT, Total.parse),
    (CaselessLiteral('s').suppress(), 1, opAssoc.LEFT, Sort.parse),

    (Literal('^').suppress(), 2, opAssoc.LEFT, Keep.parse),
    (Literal('v').suppress(), 2, opAssoc.LEFT, Drop.parse),
]) + StringEnd()
expression.setName("expression")
示例#30
0
or_.setName("or")
and_ = Suppress(Literal("&")) + filterlist
and_.setParseAction(lambda s, l, t: pureldap.LDAPFilter_and(t))
and_.setName("and")
filtercomp = and_ | or_ | not_ | item
filtercomp.setName("filtercomp")
filter_ << (
    Suppress(Literal("(").leaveWhitespace())
    + filtercomp
    + Suppress(Literal(")").leaveWhitespace())
)
filter_.setName("filter")
filtercomp.leaveWhitespace()
filter_.leaveWhitespace()

toplevel = StringStart().leaveWhitespace() + filter_ + StringEnd().leaveWhitespace()
toplevel.leaveWhitespace()
toplevel.setName("toplevel")


def parseFilter(s):
    """
    Converting source string to pureldap.LDAPFilter

    Source string is converted to unicode as pyparsing cannot parse bytes
    objects with the rules declared in this module.
    """
    s = to_unicode(s)
    try:
        x = toplevel.parseString(s)
    except ParseException as e: