Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Для примера реализации операций ++ и -- из лабораторной работы 3 в качестве теста используем следующую последовательность выражений: ++x; y++; -x--; --y; x=-y+++5; x=++y+5; y=--x-5; x=y---5;
Переменная leksema относится к перечислимому типу tipleks и описана в строках 82 – 87 измененного компилятора С0 следующим образом:
82 enum tipleks /* тип лексемы: */
83 {osh,ident,chislo,plus,minus,umn,del,ost,ravn,neravn,men,bol,
84 mravn,bravn,lskob,pskob,zpt,tchzpt,uvel,umen,prisv,
85 flskob,fpskob,ifsl,intsl,retsl,whilesl};
86 enum tipleks leksema; /* текущая лексема */
В соответствии с этим описанием, тип enum tipleks содержит значения 0, 1, 2, …, обозначаемые именами: osh = 0, ident =1, chislo = 2, plus =3, minus = 4, umn = 5, del = 6, ost = 7, ravn = 8, neravn = 9, men = 10, bol = 11, mravn = 12, bravn= 13, lskob = 14, pskob = 15, zpt = 16, tchzpt = 17, uvel = 18, umen = 19, prisv = 20, flskob = 21, fpskob = 22, ifsl = 23, intsl = 24, retsl = 25, whilesl = 26.
При чтении из файла p.c0 разработанного тестового текста
++x; y++; -x--; --y; x=-y+++5; x=++y+5; y=--x-5; x=y---5;
подпрограмма chleks должна выдавать следующую последовательность лексем (в числовой записи): 18, 1, 17, 1, 18, 17, 4, 1, 19, 17, 19, 1, 17, 1, 20, 4, 1, 18, 3, 2, 17, 1, 20, 18, 1, 3, 2, 17, 1, 20, 19, 1, 4, 2, 17, 1, 20, 1, 19, 4, 2, 17.
Если текст теста из файла p.c0 (в отсутствие подпрограммы chleks - в числовом виде) подавать в цикле по одному выражению в подпрограмму virag, то она вместе с подчиненными ей программами должна генерировать в файле p.asm следующий объектный код, условно считая x глобальной переменной, а y – локальной переменной со смещением 2 (записан в три колонки):
; ++x; INC WORD PTR 2[BP] MOV AX,x
INC x PUSH AX PUSH AX
MOV AX,x MOV BX,5 MOV BX,5
; y++; POP AX POP AX
MOV AX,2[BP] ADD AX,BX SUB AX,BX
INC WORD PTR 2[BP] PUSH AX PUSH AX
; -x--; POP AX POP AX
MOV AX,x MOV x,AX MOV 2[BP],AX
NEG AX; x=++y+5;; x=y---5;
PUSH AX INC WORD PTR 2[BP] MOV AX,2[BP]
POP AX MOV AX,2[BP] DEC WORD PTR 2[BP]
DEC x PUSH AX PUSH AX
; --y; MOV BX,5 MOV BX,5
DEC WORD PTR 2[BP] POP AX POP AX
MOV AX,2[BP] ADD AX,BX SUB AX,BX
; x=-y+++5; PUSH AX PUSH AX
MOV AX,2[BP] POP AX POP AX
NEG AX MOV x,AX MOV x,AX
PUSH AX; y=--x-5;
POP AX DEC x
Дата публикования: 2015-03-29; Прочитано: 300 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!