예제 #1
0
파일: mypgen.py 프로젝트: EvelynHf/basil
def pgen_to_grammar_obj (source):
    pgen = PyPgen.PyPgen()
    nfa_grammar = pgen.handleStart(PgenParser.parseString(source))
    dfa_grammar = pgen.generateDfaGrammar(nfa_grammar)
    pgen.translateLabels(dfa_grammar)
    pgen.generateFirstSets(dfa_grammar)
    dfa_grammar = DFAParser.addAccelerators(dfa_grammar)
    return dfa_grammar
예제 #2
0
def pgen_to_grammar_obj (source):
    '''XXX Stolen from PyCon 2010 sprint sandbox.  Move into Basil proper.'''
    pgen = PyPgen.PyPgen()
    nfa_grammar = pgen.handleStart(PgenParser.parseString(source))
    dfa_grammar = pgen.generateDfaGrammar(nfa_grammar)
    pgen.translateLabels(dfa_grammar)
    pgen.generateFirstSets(dfa_grammar)
    dfa_grammar = DFAParser.addAccelerators(dfa_grammar)
    return dfa_grammar
예제 #3
0
 def internalizePGEN (self, stream):
     """BasilGrammarModelFactory.internalizePgen
     """
     from basil.parsing import PgenParser
     from basil.models.grammar.InternalizePgen import PgenInternalizer
     if type(stream) == types.StringType:
         text = stream
     else:
         text = stream.read()
     parse = PgenParser.parseString(text)
     internalizer = PgenInternalizer(self)
     return internalizer(parse)
예제 #4
0
def main (fileName = None):
    """main
    Read a pgen input grammar from the given file name.  If no file name is
    given, read the grammar from stdin.  Print a XML document for the
    resulting grammar model translation.
    """
    if None == fileName:
        parseTree = PgenParser.parseString(sys.stdin.read())
    else:
        parseTree = PgenParser.parseFile(fileName)
    grammarFactoryClass = BasilGrammarModel.getModelFactory()
    grammarFactory = grammarFactoryClass()
    internalizer = PgenInternalizer(grammarFactory)
    model = internalizer(parseTree)
    print grammarFactory.externalizeXML(model)
예제 #5
0
파일: myparser.py 프로젝트: EvelynHf/basil
# ______________________________________________________________________
# Module data

MY_GRAMMAR_EXT = """
compound_stmt: quotedef
quotedef: 'quote' ['[' expr ']'] [NAME] qsuite
qsuite: ':' (QUOTED NEWLINE | NEWLINE QUOTED)
"""

MY_START_SYMBOL = 'file_input'

pgen = PyPgen.PyPgen()
py_grammar_path = os.path.split(basil.lang.python.__file__)[0]
py_nfa_grammar = pgen.handleStart(PgenParser.parseFile(
    os.path.join(py_grammar_path, 'python26/Grammar')))
ext_nfa_grammar = pgen.handleStart(PgenParser.parseString(MY_GRAMMAR_EXT))
my_nfa_grammar = nfa.compose_nfas(py_nfa_grammar, ext_nfa_grammar)
my_grammar0 = pgen.generateDfaGrammar(my_nfa_grammar, MY_START_SYMBOL)
pgen.translateLabels(my_grammar0, {'QUOTED' : mylexer.QUOTED})
pgen.generateFirstSets(my_grammar0)
my_grammar0[0] = map(tuple, my_grammar0[0])
my_grammar0 = tuple(my_grammar0)
my_grammar = DFAParser.addAccelerators(my_grammar0)
del my_grammar0

__DEBUG__ = False

if __DEBUG__:
    import pprint

# ______________________________________________________________________