Ejemplo n.º 1
0
 def regexes(self, ast, *args):
     pattern = ''.join(ast)
     try:
         re.compile(pattern, RE_FLAGS)
     except (TypeError, re.error) as e:
         raise FailedSemantics('regexp error: ' + str(e))
     return ast
Ejemplo n.º 2
0
 def regex(self, ast, *args):
     pattern = ast
     try:
         re.compile(pattern, RE_FLAGS)
     except (TypeError, re.error) as e:
         raise FailedSemantics('regexp error: ' + str(e))
     return pattern
Ejemplo n.º 3
0
 def pattern(self, ast, *args):
     pattern = ast
     try:
         re.compile(pattern, RE_FLAGS)
     except (TypeError, re.error) as e:
         raise FailedSemantics('regexp error: ' + str(e))
     return grammars.Pattern(pattern)
Ejemplo n.º 4
0
 def __init__(
     self,
     whitespace=re.compile('((?!^)(?![\\r\\n])\\s)+', RE_FLAGS | re.DOTALL),
     nameguard=None,
     comments_re=None,
     eol_comments_re='#[^\\r\\n]*',
     ignorecase=None,
     left_recursion=False,
     parseinfo=True,
     keywords=None,
     namechars='',
     buffer_class=PythonBuffer,
     **kwargs
 ):
     if keywords is None:
         keywords = KEYWORDS
     super(PythonParser, self).__init__(
         whitespace=whitespace,
         nameguard=nameguard,
         comments_re=comments_re,
         eol_comments_re=eol_comments_re,
         ignorecase=ignorecase,
         left_recursion=left_recursion,
         parseinfo=parseinfo,
         keywords=keywords,
         namechars=namechars,
         buffer_class=buffer_class,
         **kwargs
     )
Ejemplo n.º 5
0
def main(
        filename,
        startrule,
        trace=False,
        whitespace=None,
        nameguard=None,
        comments_re='/\\*[\\s\\S]*?\\*/',
        eol_comments_re='--.*?$',
        ignorecase=True,
        left_recursion=True,
        **kwargs):

    with open(filename) as f:
        text = f.read()
    whitespace = whitespace or re.compile('\\s+', RE_FLAGS | re.DOTALL)
    parser = SqlParser(parseinfo=False)
    ast = parser.parse(
        text,
        startrule,
        filename=filename,
        trace=trace,
        whitespace=whitespace,
        nameguard=nameguard,
        ignorecase=ignorecase,
        **kwargs)
    return ast
Ejemplo n.º 6
0
 def __init__(self,
              whitespace=re.compile('[\\t ]+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re=None,
              eol_comments_re=None,
              ignorecase=None,
              left_recursion=False,
              parseinfo=True,
              keywords=None,
              namechars='',
              buffer_class=GnomicBuffer,
              **kwargs):
     if keywords is None:
         keywords = KEYWORDS
     super(GnomicParser, self).__init__(whitespace=whitespace,
                                        nameguard=nameguard,
                                        comments_re=comments_re,
                                        eol_comments_re=eol_comments_re,
                                        ignorecase=ignorecase,
                                        left_recursion=left_recursion,
                                        parseinfo=parseinfo,
                                        keywords=keywords,
                                        namechars=namechars,
                                        buffer_class=buffer_class,
                                        **kwargs)
Ejemplo n.º 7
0
 def __init__(self,
              whitespace=re.compile('[\\t\\n\\s]+', RE_FLAGS | re.DOTALL),
              nameguard=False,
              comments_re='\\/\\*(.|\\s|\\n)*?\\*\\/',
              eol_comments_re='\\/\\/.*?$',
              ignorecase=None,
              left_recursion=False,
              parseinfo=True,
              keywords=None,
              namechars='',
              buffer_class=CropBuffer,
              **kwargs):
     if keywords is None:
         keywords = KEYWORDS
     super(CropParser, self).__init__(whitespace=whitespace,
                                      nameguard=nameguard,
                                      comments_re=comments_re,
                                      eol_comments_re=eol_comments_re,
                                      ignorecase=ignorecase,
                                      left_recursion=left_recursion,
                                      parseinfo=parseinfo,
                                      keywords=keywords,
                                      namechars=namechars,
                                      buffer_class=buffer_class,
                                      **kwargs)
Ejemplo n.º 8
0
    def _scanre(self, pattern, ignorecase=None, offset=0):
        ignorecase = ignorecase if ignorecase is not None else self.ignorecase

        if isinstance(pattern, RETYPE):
            re = pattern
        elif pattern in self._re_cache:
            re = self._re_cache[pattern]
        else:
            flags = RE_FLAGS | (regexp.IGNORECASE if ignorecase else 0)
            re = regexp.compile(pattern, flags)
            self._re_cache[pattern] = re
        return re.match(self.text, self.pos + offset)
Ejemplo n.º 9
0
    def parse(self,
              text,
              rule_name=None,
              start=None,
              filename=None,
              semantics=None,
              trace=False,
              context=None,
              whitespace=None,
              left_recursion=None,
              comments_re=None,
              eol_comments_re=None,
              parseinfo=None,
              **kwargs):
        start = start if start is not None else rule_name
        start = start if start is not None else self.rules[0].name

        ctx = context or ModelContext(
            self.rules,
            trace=trace,
            keywords=self.keywords,
            **kwargs)

        if whitespace is None:
            whitespace = self.whitespace
        if whitespace:
            whitespace = re.compile(whitespace)

        if left_recursion is None:
            left_recursion = self.left_recursion

        if parseinfo is None:
            parseinfo = self._use_parseinfo

        if comments_re is None:
            comments_re = self.comments_re

        if eol_comments_re is None:
            eol_comments_re = self.eol_comments_re

        return ctx.parse(
            text,
            rule_name=start,
            filename=filename,
            semantics=semantics,
            trace=trace,
            whitespace=whitespace,
            comments_re=comments_re,
            eol_comments_re=eol_comments_re,
            left_recursion=left_recursion,
            parseinfo=parseinfo,
            **kwargs
        )
Ejemplo n.º 10
0
 def build_whitespace_re(whitespace):
     if whitespace is None:
         return WHITESPACE_RE
     elif isinstance(whitespace, RETYPE):
         return whitespace
     elif whitespace:
         if not isinstance(whitespace, strtype):
             # a list or a set?
             whitespace = ''.join(c for c in whitespace)
         return regexp.compile('[%s]+' % regexp.escape(whitespace),
                               RE_FLAGS)
     else:
         return None
Ejemplo n.º 11
0
 def build_whitespace_re(whitespace):
     if whitespace is None:
         return WHITESPACE_RE
     elif isinstance(whitespace, RETYPE):
         return whitespace
     elif whitespace:
         if not isinstance(whitespace, strtype):
             # a list or a set?
             whitespace = ''.join(c for c in whitespace)
         return regexp.compile(
             '[%s]+' % regexp.escape(whitespace), RE_FLAGS
         )
     else:
         return None
Ejemplo n.º 12
0
 def __init__(self,
              whitespace=re.compile('[\\t ]+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='{\\-.*?\\-}',
              eol_comments_re=None,
              ignorecase=None,
              left_recursion=True,
              **kwargs):
     super(grammerParser, self).__init__(whitespace=whitespace,
                                         nameguard=nameguard,
                                         comments_re=comments_re,
                                         eol_comments_re=eol_comments_re,
                                         ignorecase=ignorecase,
                                         left_recursion=left_recursion,
                                         **kwargs)
Ejemplo n.º 13
0
    def _scanre(self, pattern, ignorecase=None, offset=0):
        ignorecase = ignorecase if ignorecase is not None else self.ignorecase

        if isinstance(pattern, RETYPE):
            re = pattern
        elif pattern in self._re_cache:
            re = self._re_cache[pattern]
        else:
            flags = RE_FLAGS | (regexp.IGNORECASE if ignorecase else 0)
            re = regexp.compile(
                pattern,
                flags
            )
            self._re_cache[pattern] = re
        return re.match(self.text, self.pos + offset)
Ejemplo n.º 14
0
    def parse(self,
              text,
              rule_name=None,
              start=None,
              filename=None,
              semantics=None,
              trace=False,
              context=None,
              whitespace=None,
              left_recursion=None,
              comments_re=None,
              eol_comments_re=None,
              parseinfo=None,
              **kwargs):
        start = start if start is not None else rule_name
        start = start if start is not None else self.rules[0].name

        ctx = context or ModelContext(
            self.rules, trace=trace, keywords=self.keywords, **kwargs)

        if whitespace is None:
            whitespace = self.whitespace
        if whitespace:
            whitespace = re.compile(whitespace)

        if left_recursion is None:
            left_recursion = self.left_recursion

        if parseinfo is None:
            parseinfo = self._use_parseinfo

        if comments_re is None:
            comments_re = self.comments_re

        if eol_comments_re is None:
            eol_comments_re = self.eol_comments_re

        return ctx.parse(text,
                         rule_name=start,
                         filename=filename,
                         semantics=semantics,
                         trace=trace,
                         whitespace=whitespace,
                         comments_re=comments_re,
                         eol_comments_re=eol_comments_re,
                         left_recursion=left_recursion,
                         parseinfo=parseinfo,
                         **kwargs)
Ejemplo n.º 15
0
 def __init__(self,
              text,
              whitespace=re.compile('\\s+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='/\\*[\\s\\S]*?\\*/',
              eol_comments_re='--.*?$',
              ignorecase=True,
              namechars='',
              **kwargs):
     super(SqlBuffer, self).__init__(text,
                                     whitespace=whitespace,
                                     nameguard=nameguard,
                                     comments_re=comments_re,
                                     eol_comments_re=eol_comments_re,
                                     ignorecase=ignorecase,
                                     namechars=namechars,
                                     **kwargs)
Ejemplo n.º 16
0
 def __init__(self,
              whitespace=re.compile('[\\t ]+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='{\\-.*?\\-}',
              eol_comments_re=None,
              ignorecase=None,
              left_recursion=True,
              **kwargs):
     super(grammerParser, self).__init__(
         whitespace=whitespace,
         nameguard=nameguard,
         comments_re=comments_re,
         eol_comments_re=eol_comments_re,
         ignorecase=ignorecase,
         left_recursion=left_recursion,
         **kwargs
     )
Ejemplo n.º 17
0
 def __init__(self,
              text,
              whitespace=re.compile('[\\t\\n\\s]+', RE_FLAGS | re.DOTALL),
              nameguard=False,
              comments_re='\\/\\*(.|\\s|\\n)*?\\*\\/',
              eol_comments_re='\\/\\/.*?$',
              ignorecase=None,
              namechars='',
              **kwargs):
     super(CropBuffer, self).__init__(text,
                                      whitespace=whitespace,
                                      nameguard=nameguard,
                                      comments_re=comments_re,
                                      eol_comments_re=eol_comments_re,
                                      ignorecase=ignorecase,
                                      namechars=namechars,
                                      **kwargs)
Ejemplo n.º 18
0
 def __init__(self,
              text,
              whitespace=re.compile('[\\t ]+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re=None,
              eol_comments_re=None,
              ignorecase=None,
              namechars='',
              **kwargs):
     super(GnomicBuffer, self).__init__(text,
                                        whitespace=whitespace,
                                        nameguard=nameguard,
                                        comments_re=comments_re,
                                        eol_comments_re=eol_comments_re,
                                        ignorecase=ignorecase,
                                        namechars=namechars,
                                        **kwargs)
Ejemplo n.º 19
0
 def __init__(self,
              text,
              whitespace=re.compile('((?!^)(?![\\r\\n])\\s)+',
                                    RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re=None,
              eol_comments_re='#[^\\r\\n]*',
              ignorecase=None,
              namechars='',
              **kwargs):
     super(PythonBuffer, self).__init__(text,
                                        whitespace=whitespace,
                                        nameguard=nameguard,
                                        comments_re=comments_re,
                                        eol_comments_re=eol_comments_re,
                                        ignorecase=ignorecase,
                                        namechars=namechars,
                                        **kwargs)
Ejemplo n.º 20
0
    def parse(self,
              text,
              start=None,
              filename=None,
              semantics=None,
              trace=False,
              context=None,
              whitespace=None,
              left_recursion=None,
              comments_re=None,
              eol_comments_re=None,
              **kwargs):
        ctx = context or ModelContext(
            self.rules,
            trace=trace,
            keywords=self.keywords,
            **kwargs)

        if whitespace is None:
            whitespace = self.whitespace
        if whitespace:
            whitespace = re.compile(whitespace)

        if left_recursion is None:
            left_recursion = self.left_recursion

        if comments_re is None:
            comments_re = self.comments_re

        if eol_comments_re is None:
            eol_comments_re = self.eol_comments_re

        return ctx.parse(
            text,
            start or self.rules[0].name,
            filename=filename,
            semantics=semantics,
            trace=trace,
            whitespace=whitespace,
            comments_re=comments_re,
            eol_comments_re=eol_comments_re,
            left_recursion=left_recursion,
            **kwargs
        )
Ejemplo n.º 21
0
 def __init__(self,
              whitespace=re.compile('\\s+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='/\\*[\\s\\S]*?\\*/',
              eol_comments_re='--.*?$',
              ignorecase=True,
              left_recursion=True,
              keywords=KEYWORDS,
              namechars='',
              **kwargs):
     super(SqlParser, self).__init__(whitespace=whitespace,
                                     nameguard=nameguard,
                                     comments_re=comments_re,
                                     eol_comments_re=eol_comments_re,
                                     ignorecase=ignorecase,
                                     left_recursion=left_recursion,
                                     keywords=keywords,
                                     namechars=namechars,
                                     **kwargs)
Ejemplo n.º 22
0
 def __init__(self,
              text,
              whitespace=re.compile('\\s+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='/\\*[\\s\\S]*?\\*/',
              eol_comments_re='--.*?$',
              ignorecase=True,
              namechars='',
              **kwargs):
     super(SqlBuffer, self).__init__(
         text,
         whitespace=whitespace,
         nameguard=nameguard,
         comments_re=comments_re,
         eol_comments_re=eol_comments_re,
         ignorecase=ignorecase,
         namechars=namechars,
         **kwargs
     )
Ejemplo n.º 23
0
 def __init__(
     self,
     text,
     whitespace=re.compile('((?!^)(?![\\r\\n])\\s)+', RE_FLAGS | re.DOTALL),
     nameguard=None,
     comments_re=None,
     eol_comments_re='#[^\\r\\n]*',
     ignorecase=None,
     namechars='',
     **kwargs
 ):
     super(PythonBuffer, self).__init__(
         text,
         whitespace=whitespace,
         nameguard=nameguard,
         comments_re=comments_re,
         eol_comments_re=eol_comments_re,
         ignorecase=ignorecase,
         namechars=namechars,
         **kwargs
     )
Ejemplo n.º 24
0
 def __init__(self,
              whitespace=re.compile('\\s+', RE_FLAGS | re.DOTALL),
              nameguard=None,
              comments_re='/\\*[\\s\\S]*?\\*/',
              eol_comments_re='--.*?$',
              ignorecase=True,
              left_recursion=True,
              keywords=KEYWORDS,
              namechars='',
              **kwargs):
     super(SqlParser, self).__init__(
         whitespace=whitespace,
         nameguard=nameguard,
         comments_re=comments_re,
         eol_comments_re=eol_comments_re,
         ignorecase=ignorecase,
         left_recursion=left_recursion,
         keywords=keywords,
         namechars=namechars,
         **kwargs
     )
Ejemplo n.º 25
0
    def parse(self,
              text,
              start=None,
              filename=None,
              semantics=None,
              trace=False,
              context=None,
              whitespace=None,
              left_recursion=None,
              comments_re=None,
              eol_comments_re=None,
              **kwargs):
        ctx = context or ModelContext(
            self.rules, trace=trace, keywords=self.keywords, **kwargs)

        if whitespace is None:
            whitespace = self.whitespace
        if whitespace:
            whitespace = re.compile(whitespace)

        if left_recursion is None:
            left_recursion = self.left_recursion

        if comments_re is None:
            comments_re = self.comments_re

        if eol_comments_re is None:
            eol_comments_re = self.eol_comments_re

        return ctx.parse(text,
                         start or self.rules[0].name,
                         filename=filename,
                         semantics=semantics,
                         trace=trace,
                         whitespace=whitespace,
                         comments_re=comments_re,
                         eol_comments_re=eol_comments_re,
                         left_recursion=left_recursion,
                         **kwargs)
Ejemplo n.º 26
0
def main(filename,
         startrule,
         trace=False,
         whitespace=None,
         nameguard=None,
         comments_re='/\\*[\\s\\S]*?\\*/',
         eol_comments_re='--.*?$',
         ignorecase=True,
         left_recursion=True,
         **kwargs):

    with open(filename) as f:
        text = f.read()
    whitespace = whitespace or re.compile('\\s+', RE_FLAGS | re.DOTALL)
    parser = SqlParser(parseinfo=False)
    ast = parser.parse(text,
                       startrule,
                       filename=filename,
                       trace=trace,
                       whitespace=whitespace,
                       nameguard=nameguard,
                       ignorecase=ignorecase,
                       **kwargs)
    return ast
Ejemplo n.º 27
0
 def __postinit__(self, ast):
     super(Pattern, self).__postinit__(ast)
     if not isinstance(ast, list):
         ast = [ast]
     self.patterns = ast
     re.compile(self.pattern, RE_FLAGS)
Ejemplo n.º 28
0
 def __postinit__(self, ast):
     super(Pattern, self).__postinit__(ast)
     if not isinstance(ast, list):
         ast = [ast]
     self.patterns = ast
     re.compile(self.pattern, RE_FLAGS)
Ejemplo n.º 29
0
 def __postinit__(self, ast):
     re.compile(ast, RE_FLAGS)
     super(Pattern, self).__postinit__(ast)
     self.pattern = ast
Ejemplo n.º 30
0
 def __postinit__(self, ast):
     re.compile(ast, RE_FLAGS)
     super(Pattern, self).__postinit__(ast)
     self.pattern = ast
Ejemplo n.º 31
0
"""
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import os
from bisect import bisect_left
from collections import namedtuple

from grako.util import ustr, strtype, re as regexp, WHITESPACE_RE, RE_FLAGS
from grako.exceptions import ParseError

# TODO: There could be a file buffer using random access

__all__ = ['Buffer']

RETYPE = type(regexp.compile('.'))


PosLine = namedtuple('PosLine', ['pos', 'line'])


LineInfo = namedtuple(
    'LineInfo',
    ['filename', 'line', 'col', 'start', 'end', 'text']
)


class Buffer(object):
    def __init__(self,
                 text,
                 filename=None,