Rev 161 | Rev 163 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/env python# Copyright: Ira W. Snyder# Start Date: 2005-11-18# End Date:# License: Public Domain## Changelog Follows:## 2005-11-18# * Just getting the basics in place, since we haven't been given# the whole description of the project yet.## Check for <Python-2.3 compatibility (boolean values)try:True, Falseexcept NameError:(True, False) = (1, 0)import sysclass RecursiveDescentParser:def __init__(self):self.__clear()def __clear(self):self.str = "" # the string of input to testself.strpos = 0 # the current position in strdef __input_test_str(self):self.str = raw_input("input str: ")def main_menu(self):done = Falsewhile not done:print 'Menu:'print '========================================'print '1. Test a string'print '2. Quit's = raw_input('Choice >>> ')if s == '1':self.__clear()self.__input_test_str()self.__test_str()elif s == '2':done = Trueelse:print 'Bad Selection'def __test_str(self):print 'Parsing: %s' % (self.procE() and 'Completed' or 'Failed', )def procE(self):print 'procE(%s) ->' % (self.str[self.strpos:])return self.procT() and self.procEprm()def procT(self):print 'procT(%s) ->' % (self.str[self.strpos:])if self.str[self.strpos] == '0':self.strpos += 1return Truereturn Falsedef procEprm(self):# Check empty strif self.strpos >= len(self.str):return Trueprint 'procEprm(%s) ->' % (self.str[self.strpos:])if self.str[self.strpos] == '+' or self.str[self.strpos] == '-':self.strpos += 1return self.procT() and self.procEprm()return Falseif __name__ == '__main__':rdp = RecursiveDescentParser()rdp.main_menu()