Интерпретатор ПОЛИЗа для модельного языка
if (eq ("-"))
{arg = ipop(); ipush (ipop()–arg); break;}
/ аналогично для других двуместных арифметических и логических операций /
if (eq ("not"))
{ipush (!ipop());break;}; if (eq ("!"))
{j = ipop(); i = j-1; break;};
/ интерпретация будет продолжена с j-го элемента ПОЛИЗа /
Интерпретатор ПОЛИЗа для модельного языка
if (eq ("!F"))
{j = ipop(); arg = ipop(); if (!arg)
{i = j-1}; break;};
/ если значение arg ложно, то интерпретация будет
продолжена с j-го элемента ПОЛИЗа, иначе порядок не изменится /
if (eq (":="))
{arg = ipop(); ip = (int )ipop();ip = arg; break;};
Интерпретатор ПОЛИЗа для модельного языка
if (eq ("R"))
{ip = ( int) ipop(); scanf("%d", ip); break;}; / "R" – обозначение операции ввода /
if (eq ("W"))
{arg = ipop(); printf ("%d", arg); break;}; / "W" – обозначение операции вывода /
case 3:
ip = = TNUM[curr_lex.value].address; ipush( ip); break;
/ значение константы – в стек /
Интерпретатор ПОЛИЗа для модельного языка
case 4:
ip = = TID [curr_lex.value].address; ipush( ip); break;
/ значение переменной – в стек /
case 5:
ip = = TID [curr_lex.value}.address; ipush((int)ip); break;
/ адрес переменной – в стек / } / конец switch /
} / конец for /