Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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]()
Ejemplo n.º 3
0
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]()