예제 #1
0
파일: test_pgen.py 프로젝트: EvelynHf/basil
def main ():
    graphical = False
    tk = None
    if "-g" in sys.argv:
        from basil.visuals.TreeBox import showTree
        graphical = True
    # ____________________________________________________________
    # Check out the metagrammar.
    pprint.pprint(pgen.metaParser.stringToSymbolMap())
    pprint.pprint(pgen.metaParser.symbolToStringMap())
    # ____________________________________________________________
    # Parse the stock Python grammar.
    gAst = pgen.metaParser.parseFile("test.pgen")
    gAstTup = pgen.astToTuple(gAst)
    if graphical:
        tk = showTree(gAstTup)
    else:
        pprint.pprint(gAstTup)
    # ____________________________________________________________
    # Build a parser state machine.
    gParser = pgen.buildParser(gAst)
    print gParser
    # ____________________________________________________________
    # Test the state machine out.
    strToSymMap = gParser.stringToSymbolMap()
    pprint.pprint(strToSymMap)
    pprint.pprint(pgen.symbolToStringMap(gParser))
    # Use the default start symbol - the first symbol in the input grammar.
    testStr = open("test_pgen.py").read()
    fAst0 = gParser.parseString(testStr)
    fAst0Tup = fAst0.toTuple()
    if graphical:
        showTree(fAst0Tup, tk)
    else:
        pprint.pprint(fAst0Tup)
    # And now with a different start symbol.
    gParser.setStart(strToSymMap["file_input"])
    fAst1 = gParser.parseString(testStr)
    fAst1Tup = fAst1.toTuple()
    if graphical:
        showTree(fAst1Tup, tk)
    else:
        pprint.pprint(fAst1Tup)
    # Throw TK into its main loop.
    if graphical:
        tk.mainloop()
예제 #2
0
def main():
    graphical = False
    if "-g" in sys.argv:
        from basil.visuals.TreeBox import showTree

        graphical = True
    # ____________________________________________________________
    grammarST0 = PgenParser.parseFile("test.pgen")
    grammarST1Obj = pgen.metaParser.parseFile("test.pgen")
    grammarST1 = grammarST1Obj.toTuple()
    print "Preliminaries:", grammarST0 == grammarST1
    if graphical:
        tk = showTree(grammarST0)
        showTree(grammarST1, tk)
    pgenObj = PyPgen.PyPgen()
    parser0 = pgenObj(grammarST0)
    parser1 = pgenObj(grammarST1)
    parser2Obj = pgen.buildParser(grammarST1Obj)
    parser2 = parser2Obj.toTuple()
    print "Test 1:", parser0 == parser1
    print "Test 2:", parser0 == parser2
    # __________________________________________________
    # The funny part of this sequence is: if the previous tests worked, isn't
    # it reasonable to assume the next test is given?  (i.e. the inputs are
    # structurally identical!)
    testPythonFile = "../PyPgen.py"
    fileObj = open(testPythonFile)
    tokenizer0 = StdTokenizer.StdTokenizer(testPythonFile, fileObj.readline)
    parse0 = DFAParser.parsetok(tokenizer0, parser0, 257)
    # __________________________________________________
    fileObj.seek(0)
    tokenizer1 = StdTokenizer.StdTokenizer(testPythonFile, fileObj.readline)
    parse1 = DFAParser.parsetok(tokenizer1, parser1, 257)
    # __________________________________________________
    fileObj.seek(0)
    tokenizer2 = StdTokenizer.StdTokenizer(testPythonFile, fileObj.readline)
    parse2 = DFAParser.parsetok(tokenizer2, parser2, 257)
    # __________________________________________________
    print "Test 3:", parse0 == parse1
    print "Test 4:", parse0 == parse2
    if graphical:
        showTree(parse0, tk)
        showTree(parse1, tk)
        showTree(parse2, tk)
        tk.mainloop()
예제 #3
0
def main (inputGrammar, inputFile = None):
    """main() - Silly little test routine"""
    # ____________________________________________________________
    # Build tokenizer
    import sys
    try:
        from basil.lang.python import StdTokenizer
    except ImportError:
        import StdTokenizer
    if inputFile == None:
        inputFile = "<stdin>"
        fileObj = sys.stdin
    else:
        fileObj = open(inputFile)
    tokenizer = StdTokenizer.StdTokenizer().tokenize(fileObj)
    # ____________________________________________________________
    # Build parser
    import pprint
    from basil.parsing import pgen
    gramAst = pgen.metaParser.parseFile(inputGrammar)
    myParser = pgen.buildParser(gramAst)
    grammar = myParser.toTuple()
    if __DEBUG__:
        pprint.pprint(grammar)
    symbols = myParser.stringToSymbolMap()
    # ____________________________________________________________
    # Run parser
    import time
    t0 = time.time()
    parseTree = parsetok(tokenizer, grammar, symbols['file_input'])
    t1 = time.time()
    print "DFAParser took %g seconds" % (t1 - t0)
    fileObj.close()
    # ____________________________________________________________
    # Display AST
    from basil.visuals.TreeBox import showTree
    showTree(parseTree).mainloop()