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()
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()
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()