140 likes | 270 Vues
This lecture focuses on advanced input handling techniques in Ada programming, specifically using the "look ahead" method to improve reading next bits of input without advancing the input stream. We discuss the challenges faced when reading input, including issues with end-of-line characters, and explore solutions to these problems. Through coding examples and comparisons with other languages like Java and C++, students will learn effective strategies for managing input effectively and enhancing their coding skills.
E N D
ITEC 320 Lecture 11 Application Part Deux Look Ahead
Review • In-class coding • What did you learn?
Outline • Look ahead
Input • What are the problems with ADA input? • What would need to be added to solve this?
Example EOL: Boolean; c: Character; -- Caution: This example ignores EOL begin lookAhead(c, EOL); put(c); -- Output is 'H' lookAhead(c, EOL); put(c); -- Output is 'H' get(c); lookAhead(c, EOL); put(c); -- Output is 'e’ end example; Assumes input Hello
Motivation • Allows you to figure out how to read next bit of input lookAhead(c, EOL); -- Use get to input if Ada.Characters.Handling.Is_Digit(c) then Ada.Integer.Text_io.get(n); -- Get an integer else Ada.Text_io.get(c); -- Get a character end if;
Motivation • Allows multiple portions of code to access the same input • Loop conditionals loop LookAhead(c, EOL); exit when is_Something(c); -- do something with c get(c); end loop; For example, when reading 123+456 This can be used to help a compiler How else could this be accomplished?
Issue • What happens when you hit the end of line? • Value returned depends on which way the wind blows EOL: Boolean; c: Character; begin loop lookAhead(c, EOL); if EOL then – End of line Ada.text_IO.Skip_line; else if is_digit(c) then -- do a numeric get else -- do a character get end if; end if; end loop;
Review • EOL false • Doesn’t advance input stream • Will return same value until some form of get is called • EOL true • What it returns doesn’t matter
Longer examples • Web examples
White space • What is white space? • Code to skip white space?
Others • Java • java.io.PushbackInputStream(InputStream) - constructs a stream that can be used to push back one byte • java.io.PushbackInputStream(InputStream, int size) - constructs a stream that can be used to push back size bytes • void unread(int b) pushes back the byte b which will be input again by the next read. Only one byte can be pushed back at a time. • C++ • unget and putback • C • ungetc
Example • Given a string, compute recursively (no loops) the number of times lowercase "hi" appears in the string.
Summary • Application coding • Other languages