Читання лексем виразу
Читання лексем виразу
Тип документу: Реферат
Сторінок: 7
Предмет: Компьютерные науки
Автор: Олексій
Розмір: 14.1
Скачувань: 1357
Щоб добути знак операції чи дужку, досить узяти поточний символ.
Добування сталих та імен (елементів типу real і st8) опишемо функціями відповідно getcon і getnam.
Побудуємо функції getcon і getnam так, щоб після виконання їх виклику поточним був символ, наступний за останнім символом добутої лексеми. У такому разі до обробки знаків операцій і дужок додамо указання переходу до наступного поточного символу tempc := getc. Імена, що не є іменами функцій із масиву Namf, будемо вважати помилковими лексемами. Якщо лексема подається змінною lx типу Tlx, то залежно від першого символу лексеми потрібно виконати такі дії:
\xF0AE lx.stl := con; lx.numb := getcon;
\xF0AE lx.name := getnam;
if lx.name представлено в Namf then lx.stl := nam
else lx.stl := err;
'+', '*', '-', '/' \xF0AE lx.stl := ops; lx.sig := tempc; tempc := getc;
'(', ')' \xF0AE lx.stl := par; lx.prt := tempc; tempc := getc;
інше \xF0AE lx.stl := err; lx.wrlx := tempc; tempc := getc;
В усіх випадках повертається значення true – ознака наявності лексеми. За символу finch повертається false. Наведена залежність є основою функції getlx:
function getlx ( var lx : Tlx ) : boolean;
begin
getlx := true; tempc := getbglx;
if tempc in Bcon then
begin
lx.stl := con; lx.numb := getcon
end
else
if tempc in Bnam then
begin
lx.name := getnam;
if isfn ( lx.name ) then lx.stl := nam
else lx.stl := err
end
else
if tempc in Bops then
begin
lx.stl := ops; lx.sig := tempc; tempc := getc
end
Добування сталих та імен (елементів типу real і st8) опишемо функціями відповідно getcon і getnam.
Побудуємо функції getcon і getnam так, щоб після виконання їх виклику поточним був символ, наступний за останнім символом добутої лексеми. У такому разі до обробки знаків операцій і дужок додамо указання переходу до наступного поточного символу tempc := getc. Імена, що не є іменами функцій із масиву Namf, будемо вважати помилковими лексемами. Якщо лексема подається змінною lx типу Tlx, то залежно від першого символу лексеми потрібно виконати такі дії:
if lx.name представлено в Namf then lx.stl := nam
else lx.stl := err;
'+', '*', '-', '/' \xF0AE lx.stl := ops; lx.sig := tempc; tempc := getc;
'(', ')' \xF0AE lx.stl := par; lx.prt := tempc; tempc := getc;
інше \xF0AE lx.stl := err; lx.wrlx := tempc; tempc := getc;
В усіх випадках повертається значення true – ознака наявності лексеми. За символу finch повертається false. Наведена залежність є основою функції getlx:
function getlx ( var lx : Tlx ) : boolean;
begin
getlx := true; tempc := getbglx;
if tempc in Bcon then
begin
lx.stl := con; lx.numb := getcon
end
else
if tempc in Bnam then
begin
lx.name := getnam;
if isfn ( lx.name ) then lx.stl := nam
else lx.stl := err
end
else
if tempc in Bops then
begin
lx.stl := ops; lx.sig := tempc; tempc := getc
end