示例#1
0
def main():
    ''' Main entry point'''

    # Configure logger
    logging.basicConfig(
        format='%(asctime)s %(levelname)8s %(filename)s:%(lineno)-5d [%(name)s] %(message)s'
      , datefmt='%m/%d/%Y %H:%M:%S'
      , level=logging.DEBUG
      )
    logger = logging.getLogger('syntax-builder')
    #logger.setLevel(logging.DEBUG)
    # Check params
    logging.info('sys.argv=%s', repr(sys.argv))
    if len(sys.argv) < 2:
        logger.error('Not enough parameters')
        sys.exit(1)

    # Open an input BNF file
    parser = Parser(logger)
    try:
        with open(sys.argv[1], encoding='utf-8') as f:
            for line in f:
                parser.feed(line)
    except IOError as e:
        logger.exception('Unable to open file: %s', e)
    except ParseError as e:
        logger.exception('Paser error[%s]: %s', sys.argv[1], e)

    parser.checkDefinitions()

    print('*********************************')
    parser.showDefinitions()
示例#2
0
 def setUp(self):
     self.parser = Parser(logger)
示例#3
0
class ParserTests(unittest.TestCase):
    def setUp(self):
        self.parser = Parser(logger)

    def test_parseEmptyToken1(self):
        with self.assertRaises(ParseError):
            self.parser.parseToken('')

    def test_parseEmptyToken2(self):
        with self.assertRaises(ParseError):
            self.parser.parseToken('+')

    def test_parseEmptyToken3(self):
        with self.assertRaises(ParseError):
            self.parser.parseToken('*')

    def test_parseEmptyToken4(self):
        with self.assertRaises(ParseError):
            self.parser.parseToken('?')

    def test_parseEmptyToken5(self):
        with self.assertRaises(ParseError):
            self.parser.parseToken('\'\'?')

    def test_parseToken1(self):
        node = self.parser.parseToken('token')
        self.assertEqual(node.name, 'token')