def parse_expr(orig_text, parse_type, start_symbol=None, debug=False, backend=None, working_dir=None, options=None,library_manager=None, name=None): logging.log_neurounits.info('In parse_expr()') # Are a parsing a complex expression? Then we need a library manager: if library_manager is None and ParseTypes is not ParseTypes.L1_Unit: logging.log_neurounits.info('Creating library manager') library_manager = LibraryManager(backend=backend, working_dir=working_dir, options=options, name=name, src_text=orig_text ) #First, let preprocess the text: #logging.log_neurounits.info('Text before preprocessing: %s' % MLine(orig_text)) text = preprocess_string(orig_text, parse_type=parse_type) #logging.log_neurounits.info('Text after preprocessing: %s' % MLine(text)) # Diff: # Now, we can parse the expression using PLY: try: logging.log_neurounits.info('Parsing with PLY: %s' % MLine(text)) pRes, library_manager = parse_eqn_block(text, parse_type=parse_type, debug=debug, library_manager=library_manager) except NeuroUnitParsingErrorUnexpectedToken, e: # Catch the exception, so that we can add more error handling to it: e.original_text = orig_text e.parsed_text = text #print str(e) raise
def parse_expr(text, parse_type, start_symbol=None, debug=False, backend=None, working_dir=None, options=None, library_manager=None, name=None): #debug=True # Are a parsing a complex expression? Then we need a library manager: if library_manager is None and ParseTypes is not ParseTypes.L1_Unit: library_manager = LibraryManager(backend=backend, working_dir=working_dir, options=options, name=name, src_text=text) #First, let preprocess the text: text = preprocess_string(text, parse_type=parse_type) # Now, we can parse the expression using PLY: try: pRes, library_manager = parse_eqn_block( text, parse_type=parse_type, debug=debug, library_manager=library_manager) except: print print 'Error Parsing: %s' % text print 'Parsing as', parse_type raise # If its a level-3 expression, we need to evaluate it: if parse_type == ParseTypes.L3_QuantityExpr: from neurounits.writers.writer_ast_to_simulatable_object import FunctorGenerator ev = FunctorGenerator().visit(pRes) pRes = ev() # And return the correct type of object: ret = { ParseTypes.L1_Unit: lambda: pRes, ParseTypes.L2_QuantitySimple: lambda: pRes, ParseTypes.L3_QuantityExpr: lambda: pRes, ParseTypes.L4_EqnSet: lambda: SeqUtils.expect_single(library_manager.eqnsets), ParseTypes.L5_Library: lambda: SeqUtils.expect_single(library_manager.libraries), ParseTypes.L6_TextBlock: lambda: library_manager, } return ret[parse_type]()
def parse_expr(text, parse_type, start_symbol=None, debug=False, backend=None, working_dir=None, options=None,library_manager=None, name=None): #debug=True # Are a parsing a complex expression? Then we need a library manager: if library_manager is None and ParseTypes is not ParseTypes.L1_Unit: library_manager = LibraryManager(backend=backend, working_dir=working_dir, options=options, name=name, src_text=text ) #First, let preprocess the text: text = preprocess_string(text, parse_type=parse_type) # Now, we can parse the expression using PLY: try: pRes, library_manager = parse_eqn_block(text, parse_type=parse_type, debug=debug, library_manager=library_manager) except: print print 'Error Parsing: %s' % text print 'Parsing as', parse_type raise # If its a level-3 expression, we need to evaluate it: if parse_type==ParseTypes.L3_QuantityExpr: from neurounits.writers.writer_ast_to_simulatable_object import FunctorGenerator ev = FunctorGenerator().visit(pRes) pRes = ev() # And return the correct type of object: ret = { ParseTypes.L1_Unit: lambda: pRes, ParseTypes.L2_QuantitySimple: lambda: pRes, ParseTypes.L3_QuantityExpr: lambda: pRes, ParseTypes.L4_EqnSet: lambda: SeqUtils.expect_single(library_manager.eqnsets), ParseTypes.L5_Library: lambda: SeqUtils.expect_single(library_manager.libraries), ParseTypes.L6_TextBlock: lambda: library_manager, } return ret[parse_type]()