예제 #1
0
def analyzer_functions_get(ModeDB):
    code = []

    # (*) Get list of modes that are actually implemented
    #     (abstract modes only serve as common base)
    mode_name_list = ModeDB.keys()

    for name, mode_descr in ModeDB.iteritems():
        dial_db.clear()

        # -- Generate 'Mode' from 'ModeDescriptions'
        mode = Mode(mode_descr)
        blackboard.mode_db[name] = mode

        if not mode.is_implemented(): continue

        txt_analyzer = cpp_generator.do(mode, mode_name_list)
        txt_counter = cpp_generator.do_default_counter(mode)

        code.extend(txt_counter)
        code.extend(txt_analyzer)

    code.append(
        do_comment_pattern_action_pairs(blackboard.mode_db.itervalues()))

    if not Setup.token_class_only_f:
        determine_start_mode(blackboard.mode_db)

    # (*) perform consistency check on newly generated mode_db
    consistency_check.do(blackboard.mode_db)

    # generate frame for analyser code
    return cpp_generator.frame_this("".join(code)), blackboard.mode_db
예제 #2
0
파일: core.py 프로젝트: dkopecek/amplify
def analyzer_functions_get(ModeDB):
    code = []

    # (*) Get list of modes that are actually implemented
    #     (abstract modes only serve as common base)
    mode_name_list = ModeDB.keys()  

    for name, mode_descr in ModeDB.iteritems():        
        dial_db.clear()

        # -- Generate 'Mode' from 'ModeDescriptions'
        mode = Mode(mode_descr)
        blackboard.mode_db[name] = mode

        if not mode.is_implemented(): continue

        txt_analyzer = cpp_generator.do(mode, mode_name_list)
        txt_counter  = cpp_generator.do_default_counter(mode)

        code.extend(txt_counter)
        code.extend(txt_analyzer)

    code.append(do_comment_pattern_action_pairs(blackboard.mode_db.itervalues()))

    if not Setup.token_class_only_f:
        determine_start_mode(blackboard.mode_db)

    # (*) perform consistency check on newly generated mode_db
    consistency_check.do(blackboard.mode_db)

    # generate frame for analyser code
    return cpp_generator.frame_this("".join(code)), blackboard.mode_db
예제 #3
0
파일: mode.py 프로젝트: coderjames/pascal
def finalize():
    """After all modes have been defined, the mode descriptions can now
       be translated into 'real' modes.
    """
    global mode_description_db

    # (*) Translate each mode description int a 'real' mode
    for name, mode_descr in mode_description_db.iteritems():
        blackboard.mode_db[name] = Mode(mode_descr)

    # (*) perform consistency check 
    consistency_check.do(blackboard.mode_db)
예제 #4
0
def finalize():
    """After all modes have been defined, the mode descriptions can now
       be translated into 'real' modes.
    """
    global mode_description_db

    # (*) Translate each mode description int a 'real' mode
    for name, mode_descr in mode_description_db.iteritems():
        blackboard.mode_db[name] = Mode(mode_descr)

    # (*) perform consistency check
    consistency_check.do(blackboard.mode_db)
예제 #5
0
def blackboard_mode_db_setup(ModeDescrDb):
    """Takes all ModeDescription-s from ModeDescrDb and generates Mode objects
    out of them. 

    RESULT: blackboard.mode_db containing appropriate Mode objects.
    """
    def enter(Name, ModeDescr):
        mode = Mode(mode_descr)  # -- Generate 'Mode' from 'ModeDescriptions'
        blackboard.mode_db[name] = mode
        return mode

    for name, mode_descr in ModeDescrDb.iteritems():
        enter(name, mode_descr)

    if not Setup.token_class_only_f:
        determine_start_mode(blackboard.mode_db)

    # (*) perform consistency check on newly generated mode_db
    consistency_check.do(blackboard.mode_db)
    return
예제 #6
0
파일: core.py 프로젝트: xxyzzzq/quex
def blackboard_mode_db_setup(ModeDescrDb):
    """Takes all ModeDescription-s from ModeDescrDb and generates Mode objects
    out of them. 

    RESULT: blackboard.mode_db containing appropriate Mode objects.
    """
    def enter(Name, ModeDescr):
        mode = Mode(mode_descr)  # -- Generate 'Mode' from 'ModeDescriptions'
        blackboard.mode_db[name] = mode
        return mode

    for name, mode_descr in ModeDescrDb.iteritems():
        enter(name, mode_descr)

    if not Setup.token_class_only_f:
        determine_start_mode(blackboard.mode_db)

    # (*) perform consistency check on newly generated mode_db
    consistency_check.do(blackboard.mode_db)
    return 
예제 #7
0
파일: mode.py 프로젝트: smmckay/quex3
def __finalize_modes_prep(ModePrepPrepDb):
    assert not Setup.token_class_only_f
    assert not Setup.converter_only_f

    assert all(
        isinstance(x, Mode_PrepPrep) for x in ModePrepPrepDb.itervalues())

    # (BEFORE) Parsing --> Mode_PrepPrep

    # (*) Mode_PrepPrep --> Mode_Prep
    #     * collection of options_db from base modes
    #     * collection of incidence_db from base modes
    #     * finalize all mentioned patterns in a mode
    #       (patterns are not yet collected from base modes)
    mode_prep_db = dict(
        (mode_prep_prep.name, mode_prep_prep.finalize(ModePrepPrepDb))
        for mode_prep_prep in ModePrepPrepDb.itervalues())

    # (*) Mode_Prep: pre finalize
    #     All patterns of all modes have been finalized
    #     => collect all patterns and loopers from base modes
    #     => generate pattern list / terminal configuration
    for mode_prep in mode_prep_db.itervalues():
        mode_prep.pre_finalize(mode_prep_db)

    consistency_check.do_pre(mode_prep_db.values())

    __determine_initial_mode(mode_prep_db)

    # (*) Mode_Prep --> Mode
    #     Pattern lists are determined for each mode
    #     => Each mode is determined whether mode is implemented or not.
    #     => Determine the concerned mode names for mode handlers
    consistency_check.do(mode_prep_db.values())

    return mode_prep_db