Читання лексем виразу, Детальна інформація
Читання лексем виразу
Щоб добути знак операції чи дужку, досить узяти поточний символ.
Добування сталих та імен (елементів типу 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
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021