def classify_until(lUntils, iToken, lObjects):
    '''
    selected_expressions ::=
        { expression when choices , }
        expression when choices
    '''

    iCurrent = iToken
    lMyUntils = lUntils
    lMyUntils.append(',')

    iCurrent = expression.classify_until(['when'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required('when', token.when_keyword,
                                                iCurrent, lObjects)

    iCurrent = choices.classify_until(lMyUntils, iCurrent, lObjects)

    while utils.is_next_token(',', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required(',', token.comma, iCurrent,
                                                    lObjects)

        iCurrent = expression.classify_until(['when'], iCurrent, lObjects)

        iCurrent = utils.assign_next_token_required('when', token.when_keyword,
                                                    iCurrent, lObjects)

        iCurrent = choices.classify_until(lMyUntils, iCurrent, lObjects)

    return iCurrent
def classify_until(lUntils, iToken, lObjects):
    '''
    conditional_expressions ::=
        expression when condition
        { else expression when condition }
        [ else expression ]
    '''

    lMyElseUntils = lUntils.copy()
    lMyElseUntils.append('else')
    lMyWhenUntils = lUntils.copy()
    lMyWhenUntils.append('when')

    iCurrent = expression.classify_until(['when'], iToken, lObjects)
    iCurrent = utils.assign_next_token_required('when', token.when_keyword,
                                                iCurrent, lObjects)
    iCurrent = condition.classify_until(lMyElseUntils, iCurrent, lObjects)

    while utils.is_next_token('else', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required('else', token.else_keyword,
                                                    iCurrent, lObjects)
        iCurrent = expression.classify_until(lMyWhenUntils, iCurrent, lObjects)
        if utils.is_next_token_in_list(lUntils, iCurrent, lObjects):
            break
        iCurrent = utils.assign_next_token_required('when', token.when_keyword,
                                                    iCurrent, lObjects)
        iCurrent = condition.classify_until(lMyElseUntils, iCurrent, lObjects)

    return iCurrent
def classify(iToken, lObjects):
    '''
    assertion ::=
        assert condition
            [ report expression ]
            [ severity expression ]

    The key to detecting this is looking for the keyword **assert** before a semicolon.
    '''

    iCurrent = utils.assign_next_token_required('assert', token.keyword,
                                                iToken, lObjects)

    iCurrent = condition.classify_until(['report', 'severity', ';'], iCurrent,
                                        lObjects)

    if utils.is_next_token('report', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required('report',
                                                    token.report_keyword,
                                                    iCurrent, lObjects)
        iCurrent = expression.classify_until(['severity', ';'], iCurrent,
                                             lObjects)

    if utils.is_next_token('severity', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required('severity',
                                                    token.severity_keyword,
                                                    iCurrent, lObjects)
        iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    return iCurrent
Exemple #4
0
def classify(iToken, lObjects):

    iCurrent = utils.tokenize_label(iToken, lObjects, token.label, token.label_colon)
    iCurrent = utils.assign_next_token_required('report', token.report_keyword, iCurrent, lObjects)

    iCurrent = expression.classify_until([';', 'severity'], iCurrent, lObjects)

    if utils.is_next_token('severity', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required('severity', token.severity_keyword, iCurrent, lObjects)
        iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent, lObjects)

    return iCurrent
Exemple #5
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_next_token_if('shared', token.shared_keyword,
                                          iToken, lObjects)
    iCurrent = utils.assign_next_token_required('variable',
                                                token.variable_keyword,
                                                iCurrent, lObjects)

    iCurrent = identifier_list.classify_until([':'], iCurrent, lObjects,
                                              token.identifier)

    iCurrent = utils.assign_next_token_required(':', token.colon, iCurrent,
                                                lObjects)

    iCurrent = subtype_indication.classify_until([';', ':='], iCurrent,
                                                 lObjects)

    if utils.is_next_token(':=', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required(':=',
                                                    token.assignment_operator,
                                                    iCurrent, lObjects)
        iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent,
                                                lObjects)
    return iCurrent
Exemple #6
0
def classify(iToken, lObjects):

    iCurrent = utils.tokenize_label(iToken, lObjects, token.case_label,
                                    token.label_colon)
    iCurrent = utils.assign_next_token_required('case', token.case_keyword,
                                                iCurrent, lObjects)
    iCurrent = utils.assign_next_token_if('?', token.question_mark, iCurrent,
                                          lObjects)

    iCurrent = expression.classify_until(['is'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required('is', token.is_keyword,
                                                iCurrent, lObjects)

    iCurrent = utils.detect_submodule(iCurrent, lObjects,
                                      case_statement_alternative)

    iCurrent = utils.assign_next_token_required('end', token.end_keyword,
                                                iToken, lObjects)
    iCurrent = utils.assign_next_token_required('case', token.end_case_keyword,
                                                iCurrent, lObjects)
    iCurrent = utils.assign_next_token_if('?', token.question_mark, iCurrent,
                                          lObjects)
    iCurrent = utils.assign_next_token_if_not(';', token.end_case_label,
                                              iCurrent, lObjects)
    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent,
                                                lObjects)

    return iCurrent
def classify(iToken, lObjects):
    '''
    file_logical_name ::= *string*_expression
    '''

    iCurrent = expression.classify_until([';'], iToken, lObjects)

    return iCurrent
Exemple #8
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_tokens_until(':=', token.target, iToken, lObjects)
    iCurrent = utils.assign_next_token_required(':=', token.assignment, iCurrent, lObjects)

    iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent, lObjects)

    return iCurrent
def classify_until(lUntils, iToken, lObjects):
    '''
    waveform_element ::=
        *value*_expression [ after *time*_expression ]
      | null [ after *time*_expression ]
    '''

    if utils.is_next_token('null', iToken, lObjects):
        iCurrent = utils.assign_next_token_required('null', token.null_keyword,
                                                    iToken, lObjects)
    else:
        lMyUntils = lUntils
        lMyUntils.append('after')
        iCurrent = expression.classify_until(lMyUntils, iToken, lObjects)

    if utils.is_next_token('after', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required('after',
                                                    token.after_keyword,
                                                    iCurrent, lObjects)
        iCurrent = expression.classify_until(lUntils, iCurrent, lObjects)

    return iCurrent
Exemple #10
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_tokens_until('<=', token.target, iToken, lObjects)
    iCurrent = utils.assign_next_token_required('<=', token.assignment,
                                                iCurrent, lObjects)
    iCurrent = utils.assign_next_token_required('force', token.force_keyword,
                                                iCurrent, lObjects)

    iCurrent = force_mode.detect(iCurrent, lObjects)
    iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent,
                                                lObjects)

    return iCurrent
Exemple #11
0
def classify(iToken, lObjects):

    if utils.is_next_token('transport', iToken, lObjects):

        return utils.assign_next_token_required('transport', token.transport_keyword, iToken, lObjects)

    else:

        iCurrent = iToken

        if utils.is_next_token('reject', iCurrent, lObjects):
            iCurrent = utils.assign_next_token_required('reject', token.reject_keyword, iCurrent, lObjects)
            iCurrent = expression.classify_until(['inertial'], iCurrent, lObjects)

        iCurrent = utils.assign_next_token_required('inertial', token.inertial_keyword, iCurrent, lObjects)
        return iCurrent
Exemple #12
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_next_token_required('with', token.with_keyword, iToken, lObjects)
    iCurrent = expression.classify_until(['select'], iToken, lObjects)
    iCurrent = utils.assign_next_token_required('select', token.select_keyword, iToken, lObjects)
    iCurrent = utils.assign_next_token_if('?', token.question_mark, iCurrent, lObjects)
    iCurrent = utils.assign_tokens_until('<=', token.target, iCurrent, lObjects)
    iCurrent = utils.assign_next_token_required('<=', token.assignment, iCurrent, lObjects)

    iCurrent = delay_mechanism.detect(iCurrent, lObjects)

    iCurrent = selected_waveforms.classify_until([';'], iToken, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent, lObjects)

    return iCurrent
Exemple #13
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_next_token_required('signal', token.signal_keyword, iToken, lObjects)
    iCurrent = identifier_list.classify_until([':'], iCurrent, lObjects, token.identifier)
    iCurrent = utils.assign_next_token_required(':', token.colon, iCurrent, lObjects)

    iCurrent = subtype_indication.classify_until([';', ':=', 'bus', 'register'], iCurrent, lObjects)

    iCurrent = signal_kind.detect(iToken, lObjects)

    if utils.is_next_token(':=', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required(':=', token.assignment_operator, iCurrent, lObjects)
        iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent, lObjects)

    return iCurrent
Exemple #14
0
def classify(iToken, lObjects):

    iCurrent = utils.tokenize_label(iToken, lObjects, token.generate_label, token.label_colon)

    iCurrent = utils.assign_next_token_required('case', token.case_keyword, iCurrent, lObjects)

    iCurrent = expression.classify_until(['generate'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required('generate', token.generate_keyword, iCurrent, lObjects)

    iToken = utils.detect_submodule(iToken, lObjects, case_generate_alternative)

    iCurrent = utils.assign_next_token_required('end', token.end_keyword, iCurrent, lObjects)
    iCurrent = utils.assign_next_token_required('generate', token.end_generate_keyword, iCurrent, lObjects)
    iCurrent = utils.assign_next_token_if_not(';', token.end_generate_label, iCurrent, lObjects)
    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent, lObjects)

    return iCurrent
def classify(iToken, lObjects):

    iCurrent = identifier_list.classify_until([':'], iToken, lObjects, token.identifier)

    iCurrent = utils.assign_next_token_required(':', token.colon, iCurrent, lObjects)

    iCurrent = mode.classify(iCurrent, lObjects)

    iCurrent = subtype_indication.classify_until([';', 'bus', ':='], iCurrent, lObjects, token.subtype_indication)

    iCurrent = utils.assign_next_token_if('bus', token.bus_keyword, iCurrent, lObjects)

    if utils.is_next_token(':=', iCurrent, lObjects):
        iCurrent = utils.assign_next_token_required(':=', token.assignment, iCurrent, lObjects)

        iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    return iCurrent
Exemple #16
0
def classify(iToken, lObjects):

    iCurrent = utils.assign_next_token_required('attribute',
                                                token.attribute_keyword,
                                                iToken, lObjects)
    iCurrent = utils.assign_next_token(token.attribute_designator, iCurrent,
                                       lObjects)
    iCurrent = utils.assign_next_token_required('of', token.of_keyword,
                                                iCurrent, lObjects)

    iCurrent = entity_specification.classify(iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required('is', token.is_keyword,
                                                iCurrent, lObjects)

    iCurrent = expression.classify_until([';'], iCurrent, lObjects)

    iCurrent = utils.assign_next_token_required(';', token.semicolon, iCurrent,
                                                lObjects)

    return iCurrent
def classify_until(lUntils, iToken, lObjects):
    '''
    condition ::=
        expression
    '''
    return expression.classify_until(lUntils, iToken, lObjects)