Зворотний зв'язок

Читання лексем виразу

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() позначає вираз ord()-ord('0'). Подамо обробку поточного символу tempc й змінювання значень cp таблицею 20.2. Відсутність присвоювань змінній cp у деяких клітинах табл. 20.2 означає, що її значення не змінюється.

За наведеною таблицею функція 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

ip : case tempc of

'0'..'9' : begin

v := v*10 + ord(tempc) - ord('0');

tempc := getc


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат