ВУЗ:
Составители:
Рубрика:
35
Пусть формула хранится в строке s и является правильной, номер текущей
позиции в строке s хранится в целой переменной ns. Перед тем как проанализи-
ровать следующий символ, вызывается процедура MoveNext, переходящая на
следующую лексему в строке s и записывающая ее в символьную переменную
CurSym. Если строка закончилась, то в переменную
CurSym записывается нуле-
вой символ. Чтобы уменьшить количество глобальных переменных, поместим все
функции грамматики и процедуру MoveNext внутрь функции-оболочки Calc и
сделаем ns и CurSym ее локальными переменными. Функция Calc будет при-
нимать строку s в качестве параметра и возвращать вычисленное выражение.
Приведем далее полный текст программы.
function Calc(s: string): integer;
var
ns: integer;
CurSym: char;
procedure MoveNext;
begin
Inc(ns);
if ns<=Length(s) then
CurSym:=s[ns]
else CurSym:=#0;
end;
function Num: integer;
begin
Result:=Ord(CurSym)-Ord('0');
end;
function Term: integer; forward;
function Factor: integer; forward;
function Expr: integer;
begin
Result:=T;
while CurSym in ['+','-'] do
begin
if CurSym='+' then
begin
MoveNext;
Result:=Result+Term;
end
else
begin
MoveNext;
Result:=Result-Term;
Страницы
- « первая
- ‹ предыдущая
- …
- 31
- 32
- 33
- 34
- 35
- …
- следующая ›
- последняя »