def main(): import sys, PgenParser, pprint, DFAParser # ____________________________________________________________ # Generate a test parser grammarST = PgenParser.parseFile("Grammar") pgenObj = PyPgen() grammarObj = pgenObj(grammarST) if "-py" in sys.argv: print "# %s" % ("_" * 70) print "# This was automatically generated by PyPgen." print "# Hack at your own risk." print print "grammarObj =", pprint.pprint(grammarObj) if "-i" in sys.argv: # __________________________________________________ # Parse some input if len(sys.argv) > 1: inputFile = sys.argv[1] fileObj = open(inputFile) else: inputFile = "<stdin>" fileObj = sys.stdin tokenizer = StdTokenizer.StdTokenizer().tokenize(fileObj) parseTree = DFAParser.parsetok(tokenizer, grammarObj, 257) fileObj.close() # __________________________________________________ # Show the result if __BASIL__: from basil.visuals.TreeBox import showTree showTree(parseTree).mainloop() else: pprint.pprint(parseTree)
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()