ОБЧИСЛЕННЯ ВИРАЗІВ У ПРОГРАМУВАННІ
v := 0; d := 1;
repeat
v := v*10 + ord(tempc) - ord('0'); tempc := getc;
until not (tempc in Bcon);
if tempc = '.' then tempc := getc;
while tempc in Bcon do
begin
d := d/10; v := v + ( ord(tempc) - ord('0') )*d; tempc := getc
end;
{сталу прочитано; поточним є символ, наступний за її останнім}
getcon := v
end;
Запишемо функцію getcon у інший спосіб, який реально застосовується в побудові підпрограм лексичного аналізу в системах програмування. Обробка чергового символу залежить від того, чи є він цифрою в цілій або дробовій частині сталої, крапкою або символом після сталої.
Додамо змінну cp типу Tcp=(ip, fp, out), елементи якого позначають місця поточного символу tempc в цілій (ip) та дробовій (fp) частині або за межами сталої (out). Спочатку cp=ip. Залежність її наступного значення від попереднього та від поточного символу tc подамо таблицею, в якій стрілка ліворуч відмічає початкове значення ip (табл.20.1).
Нехай змінна v зберігає результат обробки попередніх цифр, d – від'ємні степені числа 10 (спочатку v=0, d=1). Нехай num(
За наведеною таблицею функція getcon записується з уживанням оператора case майже механічно:
function getcon : real;
type Tcp = ( ip, fp, out );
var v, d : real; cp : Tcp;
begin
v := 0; d := 1; cp := ip;
while cp <> out do
case cp of