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)
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)
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
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
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)
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
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)
def __init__(self, Code, SourceReference): CodeFragment.__init__(self, Code, SourceReference)
# 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,
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)
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