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)
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
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)
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
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)
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()
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))
def __init__(self, *kargs, **kwargs): super().__init__(*kargs, **kwargs) self.parser = plyplus.Grammar(GRAMMAR)