ITEC 320 Lecture 11 Application Part Deux Look Ahead.
-
Upload
george-sharp -
Category
Documents
-
view
212 -
download
0
Transcript of ITEC 320 Lecture 11 Application Part Deux Look Ahead.
ITEC 320
Lecture 11Application Part Deux
Look Ahead
Applications / Look ahead
Review
• In-class coding• What did you learn?
Applications / Look ahead
Outline
• Look ahead
Applications / Look ahead
Input
• What are the problems with ADA input?
• What would need to be added to solve this?
Applications / Look ahead
Example
EOL: Boolean; c: Character; -- Caution: This example ignores EOLbegin
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
Applications / Look ahead
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;
Applications / Look ahead
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+456This can be used to help a compilerHow else could this be accomplished?
Applications / Look ahead
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;
Applications / Look ahead
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
Applications / Look ahead
Longer examples
• Web examples
Applications / Look ahead
White space
• What is white space?• Code to skip white space?
Applications / Look ahead
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
Applications / Look ahead
Example
• Given a string, compute recursively (no loops) the number of times lowercase "hi" appears in the string.
Applications / Look ahead
Summary
• Application coding• Other languages