CONS1 (Материалы к контрольным работам)
Описание файла
Файл "CONS1" внутри архива находится в следующих папках: Материалы к контрольным работам, Материалы (3), CONSTRUL. Документ из архива "Материалы к контрольным работам", который расположен в категории "". Всё это находится в предмете "конструирование компиляторов" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "CONS1"
Текст из документа "CONS1"
Модуль (программный или реализации)
+------------+
| Среда |<----- Свой модуль определений
|------------|<----- Импорт из других
| Объявления | модулей определений
+------------+
|^ |
Импорт || | Видимость
+--------+| +-----------+
| +-------+ |
v |Экспорт v
+------------------+ +-----------+
| Локальный модуль | | Процедура |
|------------------| |-----------|
| ................ | | ......... |
| | | |
+------------------+ +-----------+
Рис. 6.3
Env
^ ^
/ \
Env Env
^^ ^^
/ \ / \
Env Env Env Env
Рис. 6.4
+--------------------+
| |
| Block | Env<--------+
| | |
| | |
| Dec_List |
| | |
| | |
| Declaration |
| | \ |
| | \ |
| | Block |
| +---------+---------->Env |
v | | |
+-----> Imp_Set | Mod_Head | Exp_Set<-+
| | \ |
| | \ |
| Imp_List \ |
| | \ |
| +--------------+ Export |
| | | | |
| Import Import |--------+ |
| /| Imp_Set | | | |
| / | ^ | | | |
| From | | | Ident Ident |
| | | | | | | |
| | | | | v v |
|<--Ident | | | ---------------+
| +-------+ | +--------+
| | | | | |
| Ident Ident | Ident Ident
| | | | | |
| v v | | |
| -----------+ v v
+------------------------------
Рис. 6.5
+---------------------------------------+
| |
|---------------------------------------|
| s | o | r | t | | | | | | |<----
|---+---+---+---+---+---+---+---+---+---|
| a | | | | | | | | | |<----
|---+---+---+---+---+---+---+---+---+---|
| r | e | a | d | | | | | | |<----
|---+---+---+---+---+---+---+---+---+---|
| i | | | | | | | | | |<----
|---------------------------------------|
| |
+---------------------------------------+
Рис. 7.1
+-------------------------------------
| +------------------
| | +----------
| | | +-----
| | | |
| | | +--------------+
| | | |
v v v v
----------------------------------------------------------+
| s | o | r | t |EOS| a |EOS| r | e | a | d |EOS| i |EOS|
----------------------------------------------------------+
Рис. 7.2
+---+
0 | |
|---|
|...|
|---| +----------+ +--------+
9 | --+-->| Idenp |--+-->| | x |
|---| +----------+ +--------+
|---| v v
|...| Указатели на идентификаторы
|---| +------------+
20 | --+-->| Idenp | x |
|---| +------------+
|---| v
|...| Указатель на идентификатор
|---| +--------+ +--------+ +-------+
32 | --+-->| | -+-->| | -+-->| | x |
|---| +--------+ +--------+ +-------+
|...| v v
|---| Указатели на идентификаторы
210 | |
Рис. 7.3
|--| +------+ +------+
H----->| -+-x---->| |----->| |----->
|--| | +-->+------+ +------+
| | | |
|--| | +------------+
| +------+ |
+---| |---+
P-------->+------+
Рис. 7.4.
+---------------+
TP --->| | | -+--->Ident
+-/----\--------+
/ \
v v
Left Right
Рис. 7.6
A(-2,n+3) B(0,n+2)
/\ /\
/ \ / \
/ \ / \
B(-1,n+2)/ \ / \
/\ \C(n) D(n+1)/ \A(0,n+1)
/ \ /\ /\ /\
D(n+1)/E(n)\ / \ / \ / \
/\ /\ ---- ---- E(n)/ \ C(n)
/ \ / \ /\ /\
---- ---- / \ / \
| (а) ---- ----
Новая вершина (б)
Рис. 7.7
A(-2,n+3)) E(0,n+2)
/\ / \
/ \ / \
/ \ / \
B(1,n+2)/\ \C(n) / \
/ \ /\B(0,n+1) /\ /\A(1,n+1)
D(n)/ \ / \ / \ / \
/\E(-1,n+1)/\ ---- D(n)/ \F(n) G(n-1)/ \C(n)
/ \ / \ /\ /\ /\ /\
---- F(n) / \G(n-1) / \ / \ / \ / \
/\ /\ ---- ---- ---- ----
/ \ / \ б)
---- ----
| а)
Новая вершина
Рис. 7.8
A(-2,n+3) E(0,n+2)
/\ /\
/ \ / \
/ \ / \
B(1,n+2) / \ \C(n) B(-1,n+1)/ \A(0,n+1)
/ \ \ / \
/ \ /\ /\ /\
D(n) / E(1,n+1)\ / \ / \ / \
/\ /\ ---- D(n)/F(n-1)\ G(n)/ \C(n)
/ \ / \ /\ /\ /\ /\
---- F(n-1)/ \G(n) / \ / \ / \ / \
/\ /\ ---- ---- ---- ----
/ \ / \
---- ----
|
Новая вершина
а) б)
Рис. 7.9
A(-2,2) E(1,0)
/ /\
B(1,1)/ / \
\ / \
\ B(0,0) A(0,0)
E(0,0)
|
Новая вершина
Рис. 7.10
+------+ +------+ +-------+
-------->| | -+----->| | -+---->| | |
+------+ +------+ +-------+
T1 T2 Tn
Рис. 7.11
PROCEDURE P1; +----+
VAR V1; P2 | V2 |
PROCEDURE P2; |----|
VAR V2; |....|
BEGIN P2; |----|
V1:=... P2 | V2 |
V2:=... |----|
END P2; P1 | V1 |
BEGIN P2; +----+
END P1;
Рис. 8.1 Рис. 8.2
Минимальный адрес
+-----------------+<---------+
| Сохраненные | |
| регистры | |
|-----------------| |
Текущий | Локальные |<--+ |Область
статический |-----------------| |Disp |последней
уровень +--| Предыдущий BP |<--+- BP |вызванной
| |-----------------| | |процедуры
| | Точка возврата | |Disp |
| |-----------------| | |
| | Факт. параметры |<--+ |
||-+-----------------+-|<-------+
| | Сохраненные |
| | регистры |
| |-----------------| LP
+-+--| Предыдущий LP |<----+D
| | |-----------------| |e
Предыдущий | | | Локальные | |l
статический| | | | |t
уровень | | |-----------------| |a
| +->| Предыдущий BP |-----+
v +-----------------+
................. Максимальный адрес
Рис. 8.3
+---------------+
|Точка возврата |<---SP
|---------------|
|Факт. параметры|
|+---------------+--|
|Сохраненные |
|регистры |
|---------------| LP
+--|Предыдущий LP |<-------
| |---------------|
Предыдущий | |Локальные |
статический| | |
уровень | |---------------| BP
| |Предыдущий BP |<----
v |---------------|
|...............|
Рис. 8.4
+------------------+
| Точка возврата |
|------------------|
| Факт. параметры |
|--+------------------+--|
| Сохраненные |
| регистры |
|------------------| LP
+---| Предыдущий LP |<---+
| |------------------| D |
Предыдущий | | | e |
статический | | Локальные | l |
уровень | | | t |
| |------------------| a |
| | Предыдущий BP |<---+
v |------------------|
| ................ |
Рис. 8.5
+-----------------+<--SP
Текущий | Локальные |
уровень |-----------------|
| Предыдущий BP |<--BP
|-----------------| +------------------+
| Точка возврата | | Точка возврата |<---SP
|-----------------| |------------------|
| Факт. параметры | | Факт. параметры |
|-----------------------| +------------------+
................. ..................
Рис. 8.6 Рис. 8.7
Минимальный адрес
<------+
| Сохраненные | | Область
| регистры | | последней
|------------------| | вызванной
Текущий | Локальные | | процедуры
статический |------------------| |
уровень +--| Предыдущий BP |<-- BP <-+
| |------------------| | |
| | Точка возврата | | |
| |------------------| | |
| | Факт. параметры | | |
| |------------------|<------+ | DISPLAY[i]
| | Сохраненные | | ---------+
| | регистры | +------* |
| |------------------| ---------+
| | предыдущий |
| | DISPLAY[i] |
| |------------------|
Предыдущий | | Локальные |
статический | | |
уровень | |------------------|
+->| Предыдущий BP |
|------------------|
|..................|
Рис. 8.8
|----------------------|<-------------------------+
| Локальные | Область активации |
|----------------| текущей процедуры |
| Регистры | |
|----------------| BP |
+-----| Предыдущий BP |<----- |
| |----------------| BP предыдущего статического |
| | x---+---------> уровня |
| | Дисплей .......| BP 1-го статического уровня |
| | x---+---------> |
| |----------------| |
| | Точка возврата | |
| |----------------| |
| | Фактические | |
| |--+----------------+--|<-------------------------+
| | Локальные |
| |----------------|
| | Регистры |
| |----------------|
+---->| Предыдущий BP |
|----------------|
| Дисплей |
|----------------|
| Точка возврата |
|----------------|
|--+ Фактические +--|
Рис. 8.9.
DeclPart | Size <----------+
/|\ |
/ | \ |
/ | \ |
/ | \ |
/ | \ |
Decl Decl Decl |
Disp----->Disp--------->Disp
+ Size + Size + Size
^ ^ ^
| | |
Рис. 8.10
VarTail | Disp---------------+
| |
/ \ |
/ \ |
/ \ |
+--------Number VarTail | Disp <--+
| ^
| Table |
| |-------| |
+----------->| Disp |----------------+
|-------|
Рис. 8.11
Тип адресации VarTail левой части:
IndPre or Direct (IndPost or Abs) or
IndexReg=NO ((Direct or IndPre)
& (IndexReg<>NO))
---------------------------------------------------------
ElSize<3>= | AddrDisp<4>:= |AddrDisp<4>:=
1,2,4,8 | AddrDisp<0> |-Left<2>*ElSize<3>
AddrMode<3>=D | -Left<2>*ElSize<3> |AddrMode<4>:=IndPost
| Addreg<4>:=Addreg<0>|Addreg<4>:=
| IndexReg<4>:= |if Addreg<0> рабочий
| Addreg<3> |then Addreg<0>
| AddrMode<4>:=IndPost|else GetAddr
| Scale<4>:=ElSize<3> |IndexReg<4>:=
| | Addreg<3>
| |Scale<4>:=ElSize<3>
| |-------------------
| |LEA Address<0>,
| | Address<4>
---------------------------------------------------------
---------------------------------------------------------
ElSize<3> | AddrDisp<4>:= | AddrDisp<4>:=
<>1,2,4,8 | AddrDIP<0>- | -Left<2>*ElSize<3>
AddrMode<3>=D| Left<2>*ElSize<3> | AddrMode<4>:=IndPost
| Addreg<4>:=Addreg<0>| Addreg<4>:=
| IndexReg<4>:= | if Addreg<0> рабочий
| Addreg<3> | then Addreg<0>
| Scale<4>:=1 | else GetAddr
| AddrMode<4>:=IndPost| IndexReg<4>:=
|---------------------| Addreg<3>
| MUL ElSize<3>, | Scale:=1
| Addreg<3> |-------------------
| | LEA Address<0>,
| | Address<4>
| | MUL ElSize<4>,
| | IndexReg<4>
---------------------------------------------------------
---------------------------------------------------------
ElSize<3>= |AddrDisp<4>:= | AddrDisp<4>:=
1,2,4,8 |AddrDisp<0>- | -Left<2>*ElSize<3>
AddrMode<3><>D|Left<2>*ElSize<3> | AddrMode<4>:=IndPost
|Addreg<4>:=Addreg<0>| Addreg<4>:=
|IndexReg<4>:=GetFree| if Addreg<0> рабочий
|AddrMode<4>:=IndPost| then Addreg<0>
|Scale<4>:=ElSize<3> | else GetAddr
|--------------------| IndexReg<4>:=GetFree
|MOVE Address<3>, | Scale<4>:=ElSize<3>
| IndexReg<4> |-------------------
| | LEA Address<0>,
| | Address<4>
| | MOVE Address<3>,
| | IndexReg<4>
--------------------------------------------------------
---------------------------------------------------------
ElSize<3> |AddrDisp<4>:= | AddrDisp<4>:=
<>1,2,4,8 |AddrDisp<0>- | -Left<2>*ElSize
AddrMode<3><>D|Left<2>*ElSize<3> | AddrMode<4>:=IndPre
|Addreg<4>:=Addreg<0>| Addreg<4>:=
|IndexReg<4>:=GetFree| if Addreg<0> рабочий
| AddrMode<4>:=IndPre| then Addreg<0>
| Scale<4>:=ElSize<3>| else GetAddr
|--------------------| IndexReg<4>:=GetFree
|MOVE Address<3>, | Scale<4>:=1
| IndexReg<4> |----------------
| MUL ElSize<3>, | LEA Address<0>,
| IndexReg<4> | Address<4>
| | MOVE Address<3>,
| | IndexReg<4>
| | MUL ElSize<3>,
| | IndexReg<4>
--------------------------------------------------------
Правый операнд А2
R V