示例#1
0
文件: smarts.py 项目: tengyum/foyer
 def __init__(self, optional_names=''):
     if optional_names:
         self.grammar = _grammar.format(
             optional='{}|'.format('|'.join(optional_names)))
     else:
         self.grammar = _grammar.format(optional='')
     self.PARSER = plyplus.Grammar(self.grammar)
示例#2
0
def load_grammar(grammar_filename):
    if grammar_filename[0] == u'@':
        # Replace '@'-prefix with path to F2x.grammar.
        grammar_filename = os.path.join(package_path, u'grammar',
                                        grammar_filename[1:])

    # Check if we have a cached version
    if grammar_filename in grammar_cache:
        return grammar_cache[grammar_filename]

    # Need to adjust recursion limit as plyplus is very recusive and FORTRAN grammars are complex.
    old_recursionlimit = sys.getrecursionlimit()
    sys.setrecursionlimit(3000)

    log.info(u"Loading grammar from {0}. This may take some time...".format(
        grammar_filename))

    start = time.time()
    with open(grammar_filename, 'r') as grammar_file:
        grammar = plyplus.Grammar(grammar_file)
        grammar_cache[grammar_filename] = grammar
    timer = time.time() - start

    log.debug(u"* Loaded grammar in {0}.".format(timer))
    sys.setrecursionlimit(old_recursionlimit)

    return grammar
示例#3
0
def _parse(string):
    # Construct the parser lazily.
    global _parser
    if _parser is None:
        with open(GRAMMAR, 'rt') as f:
            _parser = plyplus.Grammar(f.read())

    # Parse `string` into a plyplus STree.
    return _parser.parse(string)
示例#4
0
 def __init__(self):
     self.code = None
     self.python_grammar = plyplus.Grammar(
         plyplus.grammars.open('python.g'))
     self.node_collection = None
     self.program = None
     self.tree = Tree()
     self.tree.create_node(data="program", identifier=0, tag="program")
     self.has_been_generated = False
示例#5
0
    def __init__(self, optional_names=''):
        if optional_names:
            for n in optional_names:
                if not n.startswith('_'):
                    raise FoyerError('Non-element types must start with an underscore, you passed {}'.format(', '.join(optional_names)))

            optional_names = sorted(optional_names, reverse=True)
            self.grammar = GRAMMAR.format(optional='{}|'.format(
                '|'.join(optional_names)))

        else:
            self.grammar = GRAMMAR.format(optional='')
        self.PARSER = plyplus.Grammar(self.grammar)
示例#6
0
 def __init__(self):
     self.grammar_file = open(os.path.dirname(__file__) + "/futhon.g")
     self.grammar = plyplus.Grammar(self.grammar_file.read())
     self.grammar_file.close()
     self.transformer = FuthonTransformer()
示例#7
0
import os
import re
import logging
from operator import itemgetter
from itertools import imap, product, groupby
import plyplus, plyplus.grammars
from django.conf import settings
from dashboard.models import Environment, Role, Host

__all__ = ("InventoryLex", "InventoryYacc")

parser = plyplus.Grammar(plyplus.grammars.open(
    os.path.join(settings.BASE_DIR, 'dashboard', 'inventory', 'inventory.g')),
                         debug=False)


def section_parse(text):
    text = text.strip("[]")
    env_name, group_name = text.split(":", 1)
    return env_name, group_name


RE_tuple = re.compile(r"\[([^\]]+)\]")
SIGN_EXCLUDE = "!"
SIGN_CONTINUE = ":"
NUMBER_FORMATTER = "{{:0{pad}d}}"


def _ranger(start, end, formatter):
    return imap(formatter.format, xrange(int(start), int(end) + 1))
示例#8
0
 def __init__(self, *kargs, **kwargs):
     super().__init__(*kargs, **kwargs)
     self.parser = plyplus.Grammar(GRAMMAR)