1. INPUT BUFFERING
• Speed of lexical analysis is a concern.
• Lexical analysis needs to look ahead several
characters before a match can be announced.
• We have two buffer input scheme that is
useful when look ahead is necessary
– Buffer Pairs
– Sentinels
3. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
4. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
5. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
6. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
7. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
N
8. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
N N
9. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
N N
Figure: An input buffer in two halves.
10. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
N N
Figure: An input buffer in two halves.
1st half
11. Buffer Pairs
• Buffer is divided into two N-characters halves.
• N is number of characters eg: 1024 or 4096.
N N
Figure: An input buffer in two halves.
1st half 2nd half
19. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
20. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
21. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
22. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
23. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
24. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
25. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
26. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
27. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
28. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
29. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
30. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
31. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
32. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
33. if forward at end of first half then begin
reload second half;
forward := forward +1
end
else if forward at end of second half then begin
reload first half;
move forward to beginning of first half
end
else forward := forward + 1;
94. : : : E : : = : M : * : eof eof
Lexeme_begining
95. : : : E : : = : M : * : eof eof
Lexeme_begining
forward
96. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
97. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
98. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
99. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
100. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
101. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
102. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
103. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
104. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
105. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
106. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
107. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
108. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
109. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
110. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
111. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
112. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
113. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
114. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
115. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
116. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
117. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
118. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
119. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
120. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
121. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
122. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
123. : : : E : : = : M : * : eof C : * : * : 2 : eof: : : : : eof
Lexeme_begining
forward
124. forward : = forward + 1;
if forward = eof then begin
if forward at end of first half then begin
reload second half;
forward := forward + 1
end
else if forward at end of second half then begin
reload first half
move forward to beginning of first half
end
else /* eof within a buffer signifying end of input */
terminate lexical analysis
end
125. forward : = forward + 1;
if forward = eof then begin
if forward at end of first half then begin
reload second half;
forward := forward + 1
end
else if forward at end of second half then begin
reload first half
move forward to beginning of first half
end
else /* eof within a buffer signifying end of input */
terminate lexical analysis
end