ВУЗ:
Составители:
Рубрика:
37
Например:
Инфиксная форма Префиксная форма Постфиксная форма
1+2*4 +1*24 124*+
(1+2)*4 *+124 12+4*
Обратим внимание, что ни префиксная, ни постфиксная форма не содержат
скобок; по этой причине их часто называют префиксной бесскобочной и пост-
фиксной бесскобочной формой записи выражения.
Реализуем компилятор, переводящий выражение в инфиксной форме в пре-
фиксную бесскобочную форму. В отличие от предыдущей программы
, функции
Expr, Term, Factor будут возвращать строковое представление префиксной бес-
скобочной формы. Как и в предыдущем примере, поместим функции Expr, Term,
Factor и процедуру MoveNext внутрь функции Prefix, принимающей в качест-
ве параметра строку s – выражение в инфиксной форме.
После преобразования строки к префиксной бесскобочной форме вызывается
функция Calc, играющая
роль ее интерпретатора. Следует обратить внимание на
то, что если префиксная бесскобочная форма построена, то она не содержит син-
таксических ошибок (все синтаксические ошибки были выявлены на этапе "ком-
пиляции" в префиксную бесскобочную форму), и при ее интерпретации о провер-
ке синтаксических ошибок уже можно не заботиться. Приведем полный текст
программы
.
function Prefix(s: string): string;
var
ns: integer;
CurSym: char;
procedure MoveNext;
begin
Inc(ns);
if ns<=Length(s) then
CurSym:=s[ns]
else CurSym:=#0;
end;
function Term: string; forward;
function Factor: string; forward;
function Expr: string;
begin
Result:=Term;
while CurSym in ['+','-'] do
begin
Result:=CurSym+Result;
MoveNext;
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »