Сторінка
6
Unit Inbuf ( input, output ); Interface const finch=chr(0); var tempc : char; function getc : char; Implementation
const bufml = 80;
type Str=string[bufml]; var buf : Str; bufl, bufp : integer; f : text; nam : Str; procedure bufinit; begin buf := ''; {спочатку буфер – порожній рядок}
bufl := 0; bufp := 0; tempc := ' '; {штучний пропуск перед початком першого рядка} writeln('Уведіть ім''я текстового файла з виразом'); readln(nam); assign(f, nam); reset(f)
end; function newln : char; … end; function getc; … end; Begin
bufinit End. Наведемо, нарешті, функції getc і newln. function getc : char; begin bufp := bufp + 1; if bufp <= bufl then tempc := buf[bufp] else { рядок вичерпано } tempc := newln; getc := tempc end; При виконанні функції newln у разі наявності наступного рядка повертається пропуск. Він штучно додається перед першим символом рядка, аби той не продовжував лексему в попередньому рядку. У разі кінця файла повертається finch – ознака закінчення виразу: function newln : char; begin if eof(f) then tempc := finch
else
begin
readln (f, buf );
bufp := 0; bufl := length ( buf ); tempc := ' '
end; newln := tempc end