Scanner Skeleton | ![]() ![]() |
indexing description: "General lexical analyzers" library: "Gobo Eiffel Lexical Library" author: "Eric Bezault <ericb@gobosoft.com>" copyright: "Copyright (c) 1998, Eric Bezault" deferred class YY_SCANNER creation make -- Create a new scanner with -- standard input as input file. make_with_file (a_file: FILE) -- Create a new scanner with -- a_file as input file. require a_file_not_void: a_file /= Void a_file_open_read: a_file.is_open_read make_with_buffer (a_buffer: like input_buffer) -- Create a new scanner with -- a_buffer as input buffer. require a_buffer_not_void: a_buffer /= Void ensure input_buffer_set: input_buffer = a_buffer feature -- Initialization reset -- Reset scanner before scanning next input source. -- (This routine can be called in wrap before scanning -- another input buffer.) feature -- Access last_token: INTEGER -- Code of last token read -- (0 means that the end-of-input has been reached, -- non-positive values mean that an error occurred -- (see header-comment of scanning_error.)) text: STRING -- Text of last token read -- (Create a new string at each call.) ensure text_not_void: Result /= Void correct_count: Result.count = text_count text_count: INTEGER -- Length of last token read ensure positive_count: Result >= 0 text_item (i: INTEGER): CHARACTER -- i-th character of last token read require i_large_enough: i >= 1 i_small_enough: i <= text_count ensure definition: Result = text.item (i) text_substring (s, e: INTEGER): STRING -- Substring of last token read -- (Create a new string at each call.) -- (For efficiency reason, this function can bypass the -- call to text and create the substring directly from -- the input buffer.) require meaningful_start: 1 <= s meaningful_interval: s <= e + 1 meaningful_end: e <= text_count ensure text_substring_not_void: Result /= Void text_substring_empty: (s > e) implies Result.empty definition: s <= e implies Result.is_equal (text.substring (s, e)) start_condition: INTEGER -- Start condition feature -- Status report end_of_file: BOOLEAN -- Has the end of input buffer been reached? -- This means that last_token has been set -- to 0 indicating "all done". scanning_error: BOOLEAN -- Has an error occurred during scanning? -- This can occur when too many reject are called (and hence -- nothing can be matched anymore) or when the option "nodefault" -- (or option -s) has been specified but the default rule is -- matched nevertheless. valid_start_condition (sc: INTEGER): BOOLEAN -- Is sc a valid start condition? feature -- Setting set_last_token (a_token: INTEGER) -- Set last_token to a_token. ensure last_token_set: last_token = a_token set_start_condition (a_start_condition: INTEGER) -- Set start_condition to a_start_condition. require valid_start_condition: valid_start_condition (a_start_condition) ensure start_condition_set: start_condition = a_start_condition feature -- Scanning scan -- Scan input_buffer until end of file is found. ensure end_of_file: not scanning_error implies end_of_file read_token -- Read a token from input_buffer. -- Make result available in last_token. feature -- Element change append_text_to_string (a_string: STRING) -- Append text at end of a_string. -- (For efficiency reason, this feature can bypass the -- call to text and directly copy the characters from -- the input buffer.) require a_string_not_void: a_string /= Void append_text_substring_to_string (s, e: INTEGER; a_string: STRING) -- Append text_substring at end of a_string. -- (For efficiency reason, this feature can bypass -- the call to text_substring and directly copy -- the characters from the input buffer.) require a_string_not_void: a_string /= Void s_large_enough: 1 <= s valid_interval: s <= e + 1 e_small_enough: e <= text_count terminate -- Terminate scanner and set last_token -- to 0 indicating "all done". wrap: BOOLEAN -- Should current scanner terminate when end of file is reached? -- This function can be redefined to switch to another input -- buffer (but don't forget to update start_condition). -- (Default: True.) more -- Tell scanner to append the next matched token -- to current value of text instead of -- replacing it. less (n: INTEGER) -- Return all but the first n matched -- characters back to input_buffer. require n_large_enough: n >= 0 n_small_enough: n <= text_count ensure text_count_set: text_count = n unread_character (c: CHARACTER) -- Put c back to input_buffer. This will alter both -- text and the content of input_buffer. read_character -- Read a character from input_buffer. -- Make result available in last_character. last_character: CHARACTER -- Last character read by read_character feature -- Input input_buffer: YY_BUFFER -- Input buffer set_input_buffer (a_buffer: like input_buffer) -- Set input_buffer to a_buffer. require a_buffer_not_void: a_buffer /= Void ensure input_buffer_set: input_buffer = a_buffer flush_input_buffer -- Flush input_buffer. input_buffer will be automatically -- refilled unless end of file has been found. ensure flushed: input_buffer.count = 0 new_file_buffer (a_file: FILE): YY_FILE_BUFFER -- New input buffer for a_file require a_file_not_void: a_file /= Void a_file_open_read: a_file.is_open_read ensure new_buffer_not_void: Result /= Void new_string_buffer (a_string: STRING): YY_BUFFER -- New input buffer for a_string require a_string_not_void: a_string /= Void ensure new_buffer_not_void: Result /= Void Empty_buffer: YY_BUFFER -- Empty input buffer ensure empty_buffer_not_void: Result /= Void feature -- Output output (a_text: like text) -- Output a_text. -- (Note: this routine can be redefined in descendant -- classes. Default: print a_text to standard output.) require a_text_not_void: a_text /= Void echo -- Output text using feature output. feature -- Error handling fatal_error (a_message: STRING) -- A fatal error occurred. -- Print a_message. require a_message_not_void: a_message /= Void invariant input_buffer_not_void: input_buffer /= Void valid_start_condition: valid_start_condition (start_condition) end -- class YY_SCANNER
Copyright © 1999, Eric
Bezault mailto:ericb@gobosoft.com http://www.gobosoft.com Last Updated: 22 March 1999 |
![]() ![]() ![]() ![]() |