Exemple #1
0
    def __default_code_fragment(IncidenceId, ModeName):

        if IncidenceId == E_IncidenceIDs.END_OF_STREAM:
            txt = 'self_send(__QUEX_SETTING_TOKEN_ID_TERMINATION);\n'
                # NOT: "Lng.PURE_RETURN" because the terminal end of stream 
                #      exits anyway immediately--after 'on_after_match'.
            return CodeFragment(txt, SourceRef_DEFAULT)

        handler_name = standard_incidence_db_get_name(IncidenceId)
        note_txt     = 'The \'%s\' handler has not been specified.' % handler_name

        msg = {
            E_IncidenceIDs.MATCH_FAILURE:
                'Match failure, no pattern matched!', 
            E_IncidenceIDs.SKIP_RANGE_OPEN:
                'End of file occurred before closing skip range delimiter!',
            E_IncidenceIDs.INDENTATION_BAD:
                'Bad indentation character detected!',
            E_IncidenceIDs.BAD_LEXATOM:
                'Bad lexatom (character encoding error) detected!',
            E_IncidenceIDs.LOAD_FAILURE:
                'General failure while loading buffer.',
            E_IncidenceIDs.OVERFLOW:
                'Lexeme exceeds buffer size.',
        }[IncidenceId]
            
        txt =   'QUEX_ERROR_EXIT("\\nMode \'%s\': %s\\n"\n' % (ModeName, msg) \
              + '                "%s\\n");' % note_txt

        return CodeFragment(txt, SourceRef_DEFAULT)
Exemple #2
0
    def __init__(self, FileName, ClassName, NameSpace, ClassNameSafe, TokenIDType):
        self.__file_name       = FileName
        self.class_name        = ClassName
        self.name_space        = NameSpace
        self.class_name_safe   = ClassNameSafe

        self.column_number_type = CodeFragment("size_t")
        self.line_number_type   = CodeFragment("size_t")
        self.token_id_type      = CodeFragment(TokenIDType)
Exemple #3
0
    def __init__(self, Code, SourceReference=SourceRef_VOID, 
                 LexemeRelevanceF=False, LexemeTerminatingZeroF=False, LexemeBeginF=False,
                 PureCode=None):
        CodeFragment.__init__(self, Code)
        if LexemeRelevanceF:
            self.__requires_lexeme_terminating_zero_f = None
            self.__requires_lexeme_begin_f            = None
        else:
            self.__requires_lexeme_terminating_zero_f = LexemeTerminatingZeroF
            self.__requires_lexeme_begin_f            = LexemeBeginF

        if PureCode is not None: self.__pure_code = PureCode
        else:                    self.__pure_code = Code
Exemple #4
0
    def __init__(self, Code, SourceReference=SourceRef_VOID, 
                 LexemeRelevanceF=False, LexemeTerminatingZeroF=False, LexemeBeginF=False,
                 PureCode=None):
        CodeFragment.__init__(self, Code, SourceReference)
        if LexemeRelevanceF:
            self.__requires_lexeme_terminating_zero_f = None
            self.__requires_lexeme_begin_f            = None
        else:
            self.__requires_lexeme_terminating_zero_f = LexemeTerminatingZeroF
            self.__requires_lexeme_begin_f            = LexemeBeginF

        if PureCode is not None: self.__pure_code = PureCode
        else:                    self.__pure_code = Code
Exemple #5
0
def create_range_skipper_code(Language, TestStr, CloserSequence, QuexBufferSize=1024, 
                              CommentTestStrF=False, ShowPositionF=False):
    assert QuexBufferSize >= len(CloserSequence) + 2

    end_str = __prepare(Language)

    door_id_on_skip_range_open = dial_db.new_door_id()

    data = { 
        "closer_sequence":    CloserSequence, 
        "closer_pattern":     Pattern(StateMachine.from_sequence(CloserSequence), 
                                      PatternString="<skip range closer>"),
        "mode_name":          "MrUnitTest",
        "on_skip_range_open": CodeFragment([end_str]),
        "door_id_after":      DoorID.continue_without_on_after_match(),
    }

    skipper_code = range_skipper.do(data, Analyzer)
    __require_variables()

    return create_customized_analyzer_function(Language, TestStr, skipper_code,
                                               QuexBufferSize, CommentTestStrF, ShowPositionF, end_str,
                                               MarkerCharList  = [], 
                                               LocalVariableDB = deepcopy(variable_db.get()),
                                               DoorIdOnSkipRangeOpen=door_id_on_skip_range_open) 
Exemple #6
0
    def from_BaseModeSequence(BaseModeSequence):
        """Collects the content of the 'incidence_db' member of this mode and
        its base modes. 

        RETURNS:      map:    incidence_id --> [ CodeFragment ]
        """
        assert len(BaseModeSequence) > 0

        # Special incidences from 'standard_incidence_db'
        result = IncidenceDB()
        for incidence_name, info in standard_incidence_db.iteritems():
            incidence_id, comment = info
            code = None
            for mode_descr in BaseModeSequence:
                code_fragment = mode_descr.incidence_db.get(incidence_name)
                if code_fragment is None: continue
                elif code_fragment.is_whitespace(): continue

                if code is None: code = code_fragment.get_code()
                else: code.extend(code_fragment.get_code())

            if code is not None:
                result[incidence_id] = CodeFragment(code)

        # Make sure, that all mandatory incidences are implemented!
        mode_name = BaseModeSequence[-1].name
        for incidence_id in IncidenceDB.mandatory_list:
            if incidence_id in result: continue
            result[incidence_id] = IncidenceDB.__default_code_fragment(
                incidence_id, mode_name)

        return result
Exemple #7
0
    def __default_code_fragment(IncidenceId, ModeName):
        if IncidenceId == E_IncidenceIDs.MATCH_FAILURE:
            txt =   "QUEX_ERROR_EXIT(\"\\n    Match failure in mode '%s'.\\n\"\n" % ModeName \
                  + "                \"    No 'on_failure' section provided for this mode.\\n\"\n" \
                  + "                \"    Proposal: Define 'on_failure' and analyze 'Lexeme'.\\n\");\n"

        elif IncidenceId == E_IncidenceIDs.END_OF_STREAM:
            txt = 'self_send(__QUEX_SETTING_TOKEN_ID_TERMINATION);\n'
            # NOT: "Lng.PURE_RETURN" because the terminal end of stream
            #      exits anyway immediately--after 'on_after_match'.

        elif IncidenceId == E_IncidenceIDs.SKIP_RANGE_OPEN:
            txt =   'QUEX_ERROR_EXIT("\\nLexical analyzer mode \'%s\':\\n"\n' % ModeName \
                  + '                "End of file occurred before closing skip range delimiter!\\n"\n' \
                  + '                "The \'on_skip_range_open\' handler has not been specified.");'
        elif IncidenceId == E_IncidenceIDs.INDENTATION_BAD:
            txt =   'QUEX_ERROR_EXIT("Mode \'%s\': bad indentation character detected!\\n"' % ModeName \
                  + '                "No \'on_indentation_bad\' handler has been specified.\\n");'
        else:
            assert False

        return CodeFragment(txt, SourceRef_DEFAULT)
Exemple #8
0
 def __init__(self, Code, SourceReference):
     CodeFragment.__init__(self, Code, SourceReference)
Exemple #9
0
# from   quex.TESTS.code.TEST.include_guard import better_name
import quex.core as core

from   quex.blackboard                  import Lng, \
                                               setup as Setup
import quex.blackboard as blackboard
from quex.input.code.base import CodeFragment

# re_include_guard = re.compile(r"__QUEX_INCLUDE_[A-Z_a-z0-9]*")
output_dir = None

Setup._debug_QUEX_TYPE_LEXATOM_EXT = True

blackboard.header = CodeFragment("""
extern bool UserConstructor_UnitTest_return_value;
extern bool UserReset_UnitTest_return_value;
extern bool UserMementoPack_UnitTest_return_value;
""")
blackboard.class_constructor_extension = CodeFragment(
    "return UserConstructor_UnitTest_return_value;")
blackboard.reset_extension = CodeFragment(
    "return UserReset_UnitTest_return_value;")
blackboard.memento_pack_extension = CodeFragment(
    "return UserMementoPack_UnitTest_return_value;")


def code(Language):
    global output_dir
    global tail_str
    command_line.do([
        "-i", "nothing.qx", "-o", "TestAnalyzer", "--odir", output_dir,
Exemple #10
0
 def __init__(self, Code, SourceReference):
     CodeFragment.__init__(self, Code, SourceReference)
Exemple #11
0
 def __default_code_fragment(IncidenceId, ModeName):
     if IncidenceId == E_IncidenceIDs.END_OF_STREAM:
         return CodeFragment(Lng.EXIT_ON_TERMINATION(), SourceRef_DEFAULT)
     else:
         return CodeFragment(Lng.EXIT_ON_MISSING_HANDLER(IncidenceId),
                             SourceRef_DEFAULT)
Exemple #12
0
    def __init__(self, Code, SourceReference=SourceRef_VOID, PureCode=None):
        CodeFragment.__init__(self, Code, SourceReference)

        if PureCode is not None: self.__pure_code = PureCode
        else: self.__pure_code = Code