Esempio n. 1
0
bs = Group(shell + OneOrMore(exponent))
bs_sp = Group(shell_sp + OneOrMore(exponent_sp))

endbs = Word('*').suppress()

basis_set = Group(
    Str.setResultsName('bdescr') + Number +
    OneOrMore(bs
              | bs_sp).setResultsName('basis') + Optional(endbs))

ecp_body = OneOrMore(eol + SkipTo(eol).suppress() +
                     Group(Number +
                           OneOrMore(Group(Number + Number + Number))))

ecp = Group(
    Str.setResultsName('edescr') + Number.suppress() +
    SkipTo(Number).suppress() + Number.setResultsName('lmax') +
    Number.setResultsName('core') + ecp_body.setResultsName('ecp'))

# define grammar here

grammar = Optional(OneOrMore(comment)) + Optional(endbs) \
    + Group(OneOrMore(basis_set)) + Optional(OneOrMore(comment)) \
    + Optional(Group(OneOrMore(ecp)))

lstr = {
    'S': 0,
    'SP': 1,
    'P': 2,
    'D': 3,
    'F': 4,
Esempio n. 2
0
def bnf(css_style_obj):
    """
    * decimal_digit   :: '0' .. '9'
    * sign            :: '-' | '+'
    * integer         :: decimal_digit+
    * float           :: [ sign ] integer '.' [ integer ] [ 'e' | 'E' [ sign ] integer ]
    * lower_case      :: 'a' .. 'z'
    * upper_case      :: 'A' .. 'Z'
    * alpha           :: lower_case | upper_case
    * punctuation     :: '`' | '~' | '!' | '@' | '#' | '$' | '%' | '^' | '&' | '*' | '(' | ')' |
                         '_' | '=' | '+' | ';' | ':' | '\'' | ',' | '<' | '.' | '>' | '/' | '?' |
                         ' ' | '-'
    * string_delim    :: '"' | '\''
    * string          :: string_delim [ alpha | decimal_digit | punctuation ]* string_delim
    * identifier      :: '_' | alpha [ alpha | decimal_digit | '_' ]*
    * attr_selector   :: '[' + identifier [ [ '~' | '*' | '^' | '$' | '|' ] '=' string ] ']'
    * class_or_id     :: ( '#' | '.' ) identifier
    * pseudo_class    :: ':' alpha [ alpha | '-' ]* [ '(' integer | identifier ')' ]
    * selector        :: identifier [ class_or_id | attr_selector ] [ pseudo_class ]
                         [ identifier [ pseudo_class ] ]
    * parameter_name  :: alpha [ alpha | decimal_digit | '_' | '-' ]*
    * lower_hex       :: 'a' .. 'f'
    * upper_hex       :: 'A' .. 'F'
    * hex_digit       :: decimal_digit | lower_hex | upper_hex
    * color           :: '#' hex_digit * 6
    * comment         :: '/' '*' .*? '*' '/'
    * url             :: 'url' '(' string ')'
    * pixel_count     :: integer 'px'
    * percentage      :: integer '%'
    * parameter_val   :: url | color | pixel_count | percentage | parameter_name | float | integer
    * parameter       :: parameter_name ':' [ comment* ]* parameter_val
                         [ parameter_val | comment* ]+ ';'
    * parameter_block :: selector [ ',' selector ]* '{' ( parameter | comment* )+ '}'
    """
    global BNF
    if BNF is None:
        fnumber = Regex(r"[+-]?\d+(:?\.\d*)?(:?[eE][+-]?\d+)?")
        identifier = Word("_"+alphas+nums)
        tilde = Literal("~")
        asterisk = Literal("*")
        caret = Literal("^")
        dsign = Literal("$")
        pipe = Literal("|")
        equal = Literal("=")
        squote = Literal("'")
        sqstring = squote + Regex(r"[^']+") + squote
        dquote = Literal('"')
        dqstring = dquote + Regex(r"[^\"]+") + dquote
        string = sqstring | dqstring
        class_or_id = Word("#"+".", "_"+alphas+nums)
        pclass = Combine(Word(":", "-"+alphas) + Optional(
            '(' + (Word(nums) | identifier) + ')'))
        attr_selector = Combine("[" + identifier + Optional(Optional(
            tilde | asterisk | caret | dsign | pipe) + equal + string) + "]")
        selector = Combine(Word("_"+alphas, "_"+alphas+nums) + Optional(
            attr_selector | class_or_id) + Optional(pclass)) | Combine(
                class_or_id + Optional(pclass)) | attr_selector
        integer = Word(nums)
        parameter_name = Word(alphas, alphas + nums + "_-")
        param_str = Word(alphas, alphas + nums + "_-")
        comment = Regex(r"[/][*].*?[*][/]", flags=re.S)
        lbrack = Literal("{")
        rbrack = Literal("}")
        px_suffix = Literal("px")
        pix_count = Combine(Word(nums) + px_suffix)
        percent = Literal("%")
        percentage = Combine(Word(nums) + percent)
        color = Word("#", hexnums, exact=7)
        urlstr = Keyword("url")
        url = urlstr + '(' + string + ')'
        parameter_val = url | color | pix_count | percentage | param_str | fnumber | integer
        parameter = (parameter_name.setParseAction(
            css_style_obj.push_param_name) + ':' + ZeroOrMore(comment.suppress()) + OneOrMore(
                parameter_val.setParseAction(css_style_obj.push_value) + ZeroOrMore(
                    comment.suppress())) + ';').setParseAction(css_style_obj.push_parameter)
        parameter_block = (delimitedList(selector).setParseAction(
            css_style_obj.push_ident_list) + lbrack + OneOrMore(
                comment.suppress() | parameter) + rbrack).setParseAction(
                    css_style_obj.push_param_block)
        BNF = OneOrMore(comment.suppress() | parameter_block)
    return BNF